[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24200] Re: Exception handling miss?

From: SASADA Koichi <ko1@...>
Date: 2004-08-29 16:26:07 UTC
List: ruby-dev #24200
 matz@ruby-lang.org (Yukihiro Matsumoto)
 Mon, 30 Aug 2004 00:46:58 +0900 / [ruby-dev:24199] Re: Exception handling miss?
 への返信です。

 ささだです。


>例外発生時にensure節内でジャンプが発生した時の妥当な挙動は、
>例外を無視することだと思うので(Javaもそうみたいだし)、これは
>このままでよいんじゃないかと思います。

 了解です。


>|class E1 < Exception; end
>|1.times{
>|  begin
>|    raise E1
>|  ensure
>|    break
>|  end
>|}
>|p $! #=> #<E1: E1>
>|
>| なケースで #<E1: E1> となっているのは変だと思います.
>|(上を無くせば問題ないような気がします)
>
>あからさまに変とまでは言えないんじゃないかと思います。どうあ
>るべきかと問われても、明確に答えられませんから、どうでも良い
>と言うのが正解かも。YARVの実装上より都合が良い挙動があったら
>聞かせてください。

 $! はこの場合 nil なんじゃないかなぁ、と思いました。
($! != nil は例外処理中であるように思いました)


class E1 < Exception; end
1.times{
  begin
    begin
      raise E1
    ensure
      break
    end
  rescue
  end
}
p $! #=> nil

 です。

 でも、そもそも気にする人も居ないような気がしてきたので、や
っぱり無視するのがいい気がしました。失礼しました。


 YARV の実装の話で言えば、「$! は rescue 節の中でだけ参照可能、
他の部分で参照した場合、無条件に nil」という仕様だといいと思い
ます。

 この仕様で困る人って居ますか?


def m
  p $!
end

begin
  raise
rescue
  p $! # RuntimeError と出力
  m    # 現状: RuntimeError を出力
       # 変更: nil を出力
end



In This Thread

Prev Next