Enumerable#reduce / injectメソッドで途中で処理を中断して、その時点での結果を返したいなーと思うときがあります。
どうするんだろうなーと思ったのですが、
Rubyのbreak文は引数とれるのでそこに結果を渡してあげればいいようです。
##以下説明
Rubyで1から5までの数を足し合わせるコードは以下のように書きます。
(1..5).reduce(0){|result, number|result + number}
このとき、もし、4以降の数字については取り除いて計算したい場合はどうするか?
最初から1〜3の値を入れとけよというツッコミは無しで。
(1..5).reduce(0){|result, number|
break result if number == 4
result + number
}
break文を入れるとイテレータが中断されるのはご存知の通りですが、
このときの返り値はbreakの引数となります(引数を与えなければ nil
)。