names=throw
visibility=public
kind=defined

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

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

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

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

同じ tag であるとは [[m:Object#object_id]] が同じであるという意味です。

@param tag catch の引数に対応する任意のオブジェクトです。
@param value catch の戻り値になります。
@raise ArgumentError 同じ 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 [[m:Kernel.#catch]]

