注入方法の簡単な説明が必要です 質問する

注入方法の簡単な説明が必要です 質問する
[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10

このコードを見ているのですが、数字の 10 が結果になる理由がわかりません。ここで何が起こっているのか説明していただけますか?

ベストアンサー1

最初のブロック引数はアキュムレータと考えることができます。ブロックの各実行の結果はアキュムレータに格納され、ブロックの次の実行に渡されます。上記のコードの場合、アキュムレータの結果はデフォルトで 0 に設定されています。ブロックの各実行では、指定された数値が現在の合計に追加され、結果がアキュムレータに格納されます。次のブロック呼び出しではこの新しい値が追加され、再び格納され、これが繰り返されます。

プロセスの最後に、inject は累積値を返します。この場合、累積値は配列内のすべての値の合計、つまり 10 になります。

文字列表現をキーとするオブジェクトの配列からハッシュを作成する別の簡単な例を次に示します。

[1,"a",Object.new,:hi].inject({}) do |hash, item|
  hash[item.to_s] = item
  hash
end

この場合、アキュムレータをデフォルトで空のハッシュに設定し、ブロックが実行されるたびにハッシュを設定します。ブロックの結果はアキュムレータに格納されるため、ブロックの最後の行としてハッシュを返す必要があることに注意してください。

おすすめ記事