From: "H.Yamamoto" Date: 2005-05-15T12:41:59+09:00 Subject: [ruby-dev:26167] Re: error.c 1.108 山本です。 >> 例外周りの挙動が変わったようで、幾つかのテストが失敗するように >> なっています。 >> >> 1) Failure: >> test_11_remote_no_method_error(TestDRbCore) [/home/akr/tmp/ >> autobuild/ruby-1.8/20050515T060903/ruby/test/drb/drbtest.rb:246]: >> exception expected but was >> Class: >> Message: <"undefined method `message' for #"> > >これはRubyのなにか(例外?)が変更されたことに >DRb等が追従すればよい、ということですか? >それとも意図しない変更なのかしら。 下のコードで再現できます。 class DRbRemoteError < RuntimeError def initialize(error) set_backtrace(error.backtrace) end end begin raise DRbRemoteError.new(NoMethodError.new) rescue p $! end begin raise DRbRemoteError.new(NoMethodError.new), "hoge" rescue p $! end /////////////////// // error.c 1.107 E:\ruby-cvs\bcc32_1_8>ruby18 \d.rb # # ////////////////// // error.c 1.108 E:\ruby-cvs\bcc32>ruby19 \d.rb # # これは、error.c 1.108 では raise の第二引数も initialize に渡るように なったためです。たぶん意図された挙動ではないと思います。 class DRbRemoteError < RuntimeError def initialize(error) p error end end raise DRbRemoteError.new(NoMethodError.new), "hoge" //////////////////////// // 結果 E:\ruby-cvs\bcc32>ruby19 \d.rb # "hoge" /d.rb:7: DRbRemoteError (DRbRemoteError)