[#380] bug report#3 and request#5 — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
1 message
1996/08/06
[ruby-list:401] Re: help: trap
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-08-12 07:41:26 UTC
List:
ruby-list #401
まつもと ゆきひろです.
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のデフォルトのハンドラが例外を発生させ
るという以外に関係は無いです.
まつもと ゆきひろ /:|)