Ruby 3.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Kernelモジュール > throw
throw(tag, value = nil) -> ()
[permalink][rdoc]Kernel.#catchとの組み合わせで大域脱出を行います。 throw は同じ tag を指定した catch のブロックの終わりまでジャンプします。
throw は探索時に呼び出しスタックをさかのぼるので、ジャンプ先は同じメソッド内にあるとは限りません。もし ensure節 が存在するならジャンプ前に実行します。
同じ tag で待っている catch が存在しない場合は、例外でスレッドが終了します。
同じ tag であるとは Object#object_id が同じであるという意味です。
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