[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:168

From: SASADA Koichi <ko1 atdot.net>
Date: Wed, 1 Sep 2004 12:09:06 +0900
Subject: [yarv-dev:168] eval in rescue clause

 ささだです。

 現在 rescue 節の引数(?)は、

begin
  raise
rescue A, B, C
  ...
end

 のとき、

1. A, B, C を評価
2. A===$!, ... で、ひっかかったら body部実行に移る

 となっていますが、これを

1. A を評価
2. C言語レベルで rb_obj_is_kind_of($!, A) が真なら bodyへ
3. 繰り返し(1へ戻る)

 にしてもいいでしょうか。ポイントは、

1. A でひっかかると B, C は評価されない
2. === が再定義されていても無視

 1 はたぶん実装の都合でこうなってると思うので問題ないんじゃ
ないかと思います。case/when の仕様とも違いますし。

 2 は、どうでしょうね。そもそも、A,B,C はそれぞれ Module
じゃないといけない、という制限が付いています。それを考えると、
いちいち === を呼ぶメリットはあまりないんじゃないかと思います。


--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

->     168 2004-09-01 12:09 [ko1 atdot.net       ] eval in rescue clause                   
       171 2004-09-06 00:25 ┗[matz ruby-lang.org  ]                                       
       172 2004-09-08 17:23  ┗[ko1 atdot.net       ]                                     
       175 2004-09-08 18:00   ┗[matz ruby-lang.org  ]                                   
       177 2004-09-08 18:03    ┗[ko1 atdot.net       ]