fkm_y' log

技術や日常のログ

最近知った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"