Enumerable応用レベル
次のプログラムを実行すると何が表示されますか?
p (1..10).lazy.map { |num| num * 2 }.take(3).inject(0, &:+)
- 112
- 245
- 355
- 4110
解説
lazy を使うことで遅延評価が行われます。map { |num| num * 2 } による変換は必要になった分だけ実行され、take(3) によって最初の3要素(2, 4, 6)のみが処理対象になります。
その後 inject(0, &:+) により合計が計算され、0 + 2 + 4 + 6 = 12 となります。
lazy がない場合は全要素に対して map が実行されますが、lazy を使うことで必要最小限の計算で済む点がポイントです。