From: kjana@... (YANAGAWA Kazuhisa) Date: 1998-11-01T02:46:47+09:00 Subject: [ruby-list:10547] Re: syntax error in thread In message <19981031235603.A651@fsinet.or.jp> Wakou Aoyama writes: > > Thread.start { .... } のブロックの中に文法がでたらめな文を入れても、 > > このスレッドが無視されるだけで、エラーは出ませんでした。 > > > > ブロックの中の文法をチェックすることはできるのでしょうか。 ちなみに本当にでたらめな文字列をいれた場合,プログラムが実行される前 に parse error でとまります.シンボルとして解釈可能な文字列の場合 (/[a-zA-Z_]\w*/),文法的には正しいので「当然」エラーは出ません.式 として解釈可能であれば同様. で,実際にスレッドが動作する時に初めて「未定義のメソッド/変数」とし て例外が上がる. # \w に数字が含まれていることをしったのはごく最近のことでした.... 個々のスレッドで例外を処理したい場合には, > Thread.start do > begin > # 適当な処理 > rescue > STDERR.print $@, "\n" > STDERR.print $!, "\n" > end > end と書いてやれば良い,と. 一般にスレッドと例外の関係は 1. デフォルトではあるスレッドで起こった例外は他のスレッドに影響を 与えない. # 例外は main thread で起こった例外.<< わかりにくい表現 (^^; 2. Thread.abort_on_exception = true とすると,どのスレッドで起こっ た例外もプログラム全体を終了させる. 3. Thread#abort_on_exception = true で特定のスレッドが例外を起こし た時プログラムが終了するようにできる. 4. Thread#value を呼ぶと,呼んだ側で例外が再発生する. となっています. ruby-man-1.1c0-jp.tar.gz だと Thread.abort_on_exception や Threadp#abort_on_exception というメソッドのように見えますが,実はどっ ちも `=' がつくメソッドですね. # というよりも,`attr :abort_on_exception, true' だと思った方が正し # い. さらに,Thread.join では例外の再発生は起こらないようなのですが,どう でしょう? =========================================================================== 柳川和久 @ 東大阪市 . 大阪府 kjana@os.xaxon.ne.jp November 1, 1998 ♪ 小さな魔女がお買いもの 橋を渡って海の果て