まつもと ゆきひろです.
In message "[ruby-list:399] help: trap"
on 96/08/12, Keiju ISHITSUKA <keiju / shljapan.co.jp> writes:
|
|けいじゅ@SHLジャパンです.
|
|trap関係で不思議な現象に会いました. 多分, trap の理解が足りないせいだ
|と思います.
ええと,trapはsignalをハンドルするものです.shのtrapやperlの
@INTをイメージしてください.SIGINTのデフォルトのシグナルハン
ドラは例外を発生させるようになっています.ですから,
|trap("SIGINT") {
| exit
|}
というはプログラムにSIGINTを送ると例外を発生させないで(シグ
ナルハンドラをオーバライドしているので),exitします.例外は
シグナルではないので,trapのハンドラは実行されません.
|あと, trapのブロックの中に return を書くと コンパイルエラーになります.
|
|3. trapのブロック中では, return できないものなのか?
トラップはシグナルが発生した時にtrapされるものです.これはトッ
プレベルで実行されるのと同じですからreturnできません(戻り先
が無い).
シグナルハンドラの途中で実行を終了させたい時にはbreakを使っ
てください(ちょっと変な気もするが).
|4. 先のメイルにも書きましたが, trapと例外の関連がイマイチ掴み切れてい
| ません. どのようになっているのでしょうか?
先程述べたようにSIGINTのデフォルトのハンドラが例外を発生させ
るという以外に関係は無いです.
まつもと ゆきひろ /:|)