最近知ったRubyの書き方
rake task を中断したい場合
- return や break ではなく next を使う
rake task
は基本的にはブロックであり、ラムダを除くブロックはreturnをサポートしていないことが原因らしい。(breakも同様?)rake task
はメソッドでreturnを使用するのと同じ効果を持つnextを使用して次のステートメントにスキップすることができる。
サンプルコード
next を使った正しい書き方
task :test do puts 'start' next puts 'end' end
return を使った誤った書き方
task :test do puts 'start' return puts 'end' end
エラーで怒られる
rake aborted! LocalJumpError: unexpected return
ネストされたループ処理から一気に外側のループへ出る方法
try catchを使うと良い。
catch :done do 3.times do |num| %w(ruby python php).each do |lang| throw :done if num == 1 && lang == 'python' p "#{num} #{lang}" end end end # => "0 ruby" # "0 python" # "0 php" # "1 ruby"