throw/catch

throw/catchKernelのメソッド。

# Kernel のメソッドであることがわかるように、明示的に Kernel.(...) の形で呼んでいる
Kernel.catch :error do
  puts "hoge"
  Kernel.throw :error
  puts "fuga"
end
#=> hoge

throwで投げることができるのは任意のオブジェクト。throwで投げたものがcatchで指定したものとequal?の意味で等しければ、catchの引数にあるブロックから脱出する。

raise/rescue

こっちが通常の例外処理に使われる。 raiseKernelのメソッドだが、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

参考