原> まつもとさんがちゃんと答えてくれるとおもいますが、少しだけ 原> 私がお相手を、、、 _o_ 原> > LET LOZW_sOKMsg (FIX_MESG(CATGETS LOZW_sCatName LOZW_iMsgID 原> (LOZW_sCatName + STR LOZW_iMsgID + '[' + '{1} + ']' + '[' + '{2}' + ']')) 原> LOZW_sMsgStr1 LOZW_sMsgStr2) 原> 原> 質問です。これが ruby のソースプログラムでこれを 原> 原> ruby <このソース> 原> 原> として起動したときに Segmentation fault が起こるのですか?それとも 原> 他にプログラムがあってこれをデータとして食わせているのですか? 原> (めちゃめちゃ読みにくいコードですね。(^^;) 聞いてくれる。 このめちゃくちゃなコードを書かないといけない環境でここ一年物作り。 変数は(パラメータ宣言と、local宣言以外)グローバル。 サブルーチン名と変数名の名前空間が一緒だから、うっかりサブルーチンに 代入すると壊れる。 ちゅうか、変数ってのが、代入された値を返すサブルーチンなのだろう サブルーチンの戻り値を直接代入するとこける。 debug環境がまた凄くて、print にあたる display と trace だけ ということで、ソースを喰わせて cflow 見たいな出力出して 名前の衝突やら、利用関係を見るツールを作ってる分け。rubyで。 perl版があるんだが、逆展開にBUG があるので、作り直し。 ということで、 原> 他にプログラムがあってこれをデータとして食わせているのですか? です 原> どっちにしろ Segmentation fault を例外としてトラップはできないと思い 原> ますが。一応バグ。 だろうなー。 原> > class Read_FILE <File 原> > def addLine 原> > if bufline=@file.gets() 原> > print bufline,"\n" 原> > @CurNr = @CurNr + 1 原> この print は File の上位クラス IO のメソッド print が呼ばれてしま 原> います。つまり self.print が実行されるのではないでしょうか。 ん?わからんぞ、だって継承してるんじゃないの? と思ってたら、 》From: matz / caelum.co.jp (Yukihiro Matsumoto) 》Subject: [ruby-list:1485] Re: 例外 》Date: Wed, 25 Dec 96 11:58:57 JST ま> うーん,直接的な原因は良く分かんないんですけど,根本の原因は ま> ま> | class Read_FILE <File ま> ま> にあると思います.検出できないrubyが馬鹿なんですけど.これやっ ま> ちゃうとクラスはIOのサブクラスでインスタンスの構造が通常オブ ま> ジェクトと同じ,というインスタンスができちゃいます.これで ま> rubyのビルトインメソッドが発狂してしまうのではないかと想像し ま> ます. という事ですか ま> |質問2 ま> | debug 用に print を入れようと思ったのですが、class のmethod の ま> | 中で使うと ま> | wmrflow:92:in `print': not opened for writing ま> | と言われる事があります。 ま> ま> Fileのサブクラス内ではprintは使えません.デバッグ用には p を ま> 使ってください. ま> ま> p bufline ま> ま> で,それなりの表示が行われるはずです. はい。 ま> # でもFileのサブクラスは作らないでくださいね. はい。 原さんにも指摘受けて気付きました。 原> それから組み込みクラスのサブクラスではインスタンス変数(@file など。 原> 出沢さんの言うプロパティ?)は使えない事になってますが。(という話 原> 題が何度も上がってます。(^^;) その答えをもらう質問の前にこのコードができていて、 で、今まで破綻していなかったので気付きませんでした。 ま># この件はすくなくとも検出はできるようにしたいですね. よろしゅう。