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

Ruby のブロック内で return すると…

Ruby のブロック内で return するとブロックを抜けるのではなくて、メソッドから抜けます。

[コード]

def sum n
    result = 0
    n.times.each { |it|
        # ここで return を呼ぶとブロックを抜けるのではなくて
        # メソッドから抜ける
        return if it > 10
        result += it
    }
    result
end

sum 5
# => 10
sum 10
# => 45
sum 20
# => nil

ブロックから抜けたいときにうっかり使いそうなので注意する必要がありそう。
ちなみにブロックから抜けるわけではないですが、ブロックの処理をスキップしたい場合は next が使用できます。