From: matz@... (Yukihiro Matsumoto) Date: 1996-08-12T16:41:26+09:00 Subject: [ruby-list:401] Re: help: trap まつもと ゆきひろです. In message "[ruby-list:399] help: trap" on 96/08/12, Keiju ISHITSUKA 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のデフォルトのハンドラが例外を発生させ るという以外に関係は無いです. まつもと ゆきひろ /:|)