rails 7.0では数値以外のArrrayで第一引数を指定せずにEnumerable.sum
を使用していた場合に以下のdeprecated warningが発生します。
Rails 7.0 has deprecated Enumerable.sum in favor of Ruby's native implementation available since 2.4.
Sum of non-numeric elements requires an initial argument.
理由
rails 7.1からrails実装のEnumerable.sum
がなくなりrubyのEnumerable.sum
を呼び出すようになる為、数値以外のArrayに対しsum
メソッドを呼び出す場合には第一引数が必須となります。
詳細
rubyのEnumerable.sum
は第一引数に対して+
メソッドを実行します。
この第一引数のデフォルトが0
なので数値の場合はそのまま処理ができますが例えば文字列の場合は0
に対してString
を+
しようとするためTypeError
発生します。
rails 7.1以前
inject(:+)
された結果を返すので文字列の場合も結合可能
> ["a", "b"].sum
=> "ab"
rails 7.1以降
初期値0に対して文字列を+しようとしてエラーになる
> ['a', 'b'].sum
(irb):94:in `+': String can't be coerced into Integer (TypeError)
> ['a', 'b'].sum('')
=> "ab"