Enumerable応用レベル

次のプログラムを実行するとどうなりますか?

amounts = [1000, 2000, 3000]

selected = amounts.select! { |amount| amount >= 1000 }

total = selected.sum

p total
  • 16000 と表示される
  • 20 と表示される
  • 3[] と表示される
  • 4NoMethodError が発生する

解説

select! は破壊的に配列を絞り込みますが、1件も削除されず配列に変更がなかった場合は nil を返します。この例では全要素が amount >= 1000 を満たすため、selected は配列ではなく nil になります。そのため selected.sumundefined method 'sum' for nil:NilClassNoMethodError になります。

問題一覧へ戻る