throw/catch
throw
/catch
はKernel
のメソッド。
# Kernel のメソッドであることがわかるように、明示的に Kernel.(...) の形で呼んでいる
Kernel.catch :error do
puts "hoge"
Kernel.throw :error
puts "fuga"
end
#=> hoge
throw
で投げることができるのは任意のオブジェクト。throw
で投げたものがcatch
で指定したものとequal?
の意味で等しければ、catch
の引数にあるブロックから脱出する。
raise/rescue
こっちが通常の例外処理に使われる。
raise
はKernel
のメソッドだが、rescue
と後述するbegin
, else
, ensure
はメソッドではないRubyの構文。
begin
puts "hoge"
Kernel.raise RuntimeError, "an error occurred"
rescue RuntimeError
puts "error caught"
else
puts "no error"
ensure
puts "this must be evaluated"
end
#=>
# hoge
# error caught
# this must be evaluated