Bug #1105: Ruby1.9でのrescue節の例外ハンドラのマッチの処理
http://redmine.ruby-lang.org/issues/show/1105

起票者: Tatsuji Kawai
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.9.2dev (2009-02-02 trunk 21974) 

河井です。

Ruby1.9とRuby1.8では、例外ハンドルクラスのリストにExceptionのサブ
クラス以外のオブジェクトが含まれている場合の挙動に違いがあります。

例えば以下のプログラムを実行した場合、

begin
  raise
rescue Object.new, RuntimeError => e
  p e
end

ruby 1.9.2dev (2009-02-02 trunk 21974)
[i686-linux]の場合の実行結果以下で

# => RuntimeError

Object.new が無視され、例外が補足されるようです。


ruby 1.8.7 (2008-08-11 patchlevel 72)
[i486-linux]の場合の実行結果は

# => /tmp/test.rb:3: class or module required for rescue clause (TypeError)

となり、Object.neweがExceptionのサブクラスでないので例外が発生します。


参考までに、以下のコードの実行結果は1.9と1.8とも同で
RuntimeErrorが補足される結果となります。

begin
  raise
rescue RuntimeError, Object.new => e
  p e
end

--
河井達治


----------------------------------------
http://redmine.ruby-lang.org