Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > module Kernel > throw

module function Kernel.#throw

throw(tag, value = nil) -> ()

Kernel.#catchとの組み合わせで大域脱出を行います。 throw は同じ tag を指定した catch のブロックの終わりまでジャンプします。

throw は探索時に呼び出しスタックをさかのぼるので、 ジャンプ先は同じメソッド内にあるとは限りません。 もし ensure節 が存在するならジャンプ前に実行します。

もし同じ tag で待っている catch が存在しない場合は NameError で スレッドが終了します。

同じタグであるとは Object#object_id が同じであるという意味です。

[PARAM] tag:
catch の引数に対応する任意のオブジェクトです。
[PARAM] value:
catch の戻り値になります。
[EXCEPTION] NameError:
同じ tag で待っている catch が存在しない場合に発生します。
def foo
  throw :exit, 25
end

ret = catch(:exit) do
  begin
    foo
    some_process()    # 絶対に実行されない
    10
  ensure
    puts "ensure"
  end
end
puts ret
#=> ensure
#   25

[SEE_ALSO] Kernel.#catch