[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のデフォルトのハンドラが例外を発生させ
るという以外に関係は無いです.

                                まつもと ゆきひろ /:|)

In This Thread

Prev Next