raise
「raise <文字列>」した場合、文字列をメッセージに持つRuntimeErrorが発生します。JavaScriptみたく文字列がそのまま飛んできたりはしません。
begin raise "test" rescue RuntimeError puts $!.to_s end
実行結果です。
test
RuntimeErrorはStandardErrorのサブクラスなので、クラスを省略しても捕捉できます。
begin raise "test" rescue puts $!.to_s end
実行結果です。
test
あと、「$@」で例外の発生位置がゲットできます。これもしらなんだ。
def raise_c raise "test" end def raise_b raise_c end def raise_a raise_b end begin raise_a rescue puts $@ end
実行結果です。
xxx/raise.rb:17:in `raise_c' xxx/raise.rb:21:in `raise_b' xxx/raise.rb:25:in `raise_a' xxx/raise.rb:29