2012-03-08 11 views
2

奇妙なタイトルのため申し訳ありませんが、私はこの問題をどのように分類するのかよく分かりません。私はいくつかのルビコードを1.9.3に更新する過程にあり、いくつかの奇妙な動作を見ています。問題を蒸留し、私が取得:ルビのバージョン間の暗黙的な例外クラスの違い

def convert(exception) 
    raise exception.message 
end 

begin 
    convert(StandardError.new(StandardError)) 
rescue => e 
    puts e.class 
end 

1.9.2では、出力は

StandardError 

と1.9.3で、TE出力はルビーのドキュメントかかわら探し

RuntimeError 

ですリリースノートは本当に私にここで何が起こっているのかについての手がかりを与えていないし、どんな助けもありがとう! (すなわち、ないの奇妙な事が起こるのを引き起こし、それが予想外のクラスで例外を発生させる終わる

答えて

2

問題はその前に1.9.3にあるように思わ、Exception#messageがクラスClassのオブジェクトを返し、ないStringRuntimeError)。

この不具合はthis commitに修正され、1.9.3 changelogに存在します。

最終的にはraise exceptionになりますが、raise exception.messageにはなりません。

+0

これは意味があります。私はCコードを読むことについてより良くなる必要があります。明確にするために、クラス自体が返されたメッセージではなく、渡されたオブジェクトが文字列に変換されているはずです。助けてくれてありがとう! – Chris

+0

'String'を返すはずです。しかし、実際に*返したのは少し解読しにくいです。その上で '.class'を呼び出すと' Class'が生成されますが、もっと奇妙なことが起こりそうです。それがC言語(とC Rubyは巨大であるため)に従うのは難しいです。 –

関連する問題