概要
Kernel#throw(tag, value = nil) -> ()
詳細
Kernel.#catchとの組み合わせで大域脱出を行います。
throw は同じ tag を指定した catch のブロックの終わりまでジャンプします。
tag はメソッド内とは限らない。
サンプルコード
def pattern1 cnt = 0 catch(:pattern1) do loop do cnt += 1 puts cnt throw :pattern1, "pattern1" if cnt == 5 end end end print pattern1 def pattern2_1 cnt = 0 loop do cnt += 1 puts cnt throw :pattern2, "pattern2" if cnt == 5 end end def pattern2_2 cnt = 0 catch(:pattern2) do begin pattern2_1 ensure puts "ensure" end end end puts print pattern2_2
出力
1 2 3 4 5 pattern1 1 2 3 4 5 ensure pattern2