けいじゅ@SHLジャパンです. In [ruby-list :00401 ] the message: "[ruby-list:401] Re: help: trap ", on Aug/12 16:41(JST) matz / caelum.co.jp (Yukihiro Matsumoto) writes: >ええと,trapはsignalをハンドルするものです.shのtrapやperlの >@INTをイメージしてください.SIGINTのデフォルトのシグナルハン >ドラは例外を発生させるようになっています.ですから, なるほど, シグナルハンドラが例外を発生させるようになっていたのですね. >|trap("SIGINT") { >| exit >|} > >というはプログラムにSIGINTを送ると例外を発生させないで(シグ >ナルハンドラをオーバライドしているので),exitします.例外は >シグナルではないので,trapのハンドラは実行されません. 聞きたかったのはそういうことではなくて, 例えば: %ruby trap("SIGINT") { print 1 exit } sleep 1000 print 2 とし, これを実行し ^C すると, 12 が表示されます. これって 変な動作じゃないですか? と聞きたかったのです が?? >|あと, trapのブロックの中に return を書くと コンパイルエラーになります. >|3. trapのブロック中では, return できないものなのか? >トラップはシグナルが発生した時にtrapされるものです.これはトッ >プレベルで実行されるのと同じですからreturnできません(戻り先 >が無い). なるほど. >シグナルハンドラの途中で実行を終了させたい時にはbreakを使っ >てください(ちょっと変な気もするが). つまり, ブロックを修了するか break すると 再実行するということですね. >|4. 先のメイルにも書きましたが, trapと例外の関連がイマイチ掴み切れてい >| ません. どのようになっているのでしょうか? >先程述べたようにSIGINTのデフォルトのハンドラが例外を発生させ >るという以外に関係は無いです. わかりました. __ ..........................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju / shljapan.co.jp <----