Ruby injectについて

よくある説明
injectメソッドは、ブロックを使って繰り返し計算を行うのに使います。ブロックに順に「要素1、要素2」、「ブロックの前回の戻り値、要素3」、「ブロックの前回の戻り値、要素4」、...を渡します。メソッドの戻り値はブロックが最後に返した値になります。

numbers = [4, 3, 9, 8, 5, 6, 1, 7, 2]
puts numbers.inject {|sum, n| sum + n }

=>45

これでは、初学者にはわからないと思います。
それでわかりやすくまとめてみます。
つまるところ
(((((((4+3)+9)+)8)+)5)+)6)+)1)+)7)+2) をやっています。

ブロックの引数 => | ブロック引数 |  sum,とnには初め、要素の1番めと2番めの4と3が入ります

4+3 が実行され 7になります。    そして結果の7が次のループで、ブロック引数の1つ目のsumに代入されて、次の要素9が回ります。

よって2回めはのループでは、7+9 が実行され18になります。

3回めはsum に18が入り 18+8 が実行され 26になります。 これが次のループのときのsumに入ります。
畳み込み演算と呼ばれたりもします。
swiftにも同じ様なものがあります。