読者です 読者をやめる 読者になる 読者になる

Rubyのcatchとthrow

def est_throw
    # catchで指定したものと同じシンボルが指定されてるから呼び出し元のブロック終了
    throw :test
end
 
puts "test start
 
# ブロックの同じシンボルを引数にしてthrowを呼ぶとブロックを終了
catch(:test) do
  puts "before test_throw()"
  # メソット実行
  test_throw()
  puts "after test_throw()"
end
puts "test end"

実行してみると

test start
before test_throw()
test end
after test_throw()

が出力されてない。

これはtest_throwを呼び出してるブロックが

catch(:test)

で指定されていて

上記のシンボル付きでthrowされたらブロック終了という事。

使い所はまだわからんけど。