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 を使うことで必要最小限の計算で済む点がポイントです。

問題一覧へ戻る