サカナ未遂

プログラミング、筋トレ、お酒など

Rubyのinjectでハマったのでメモ

 

みなさまこんにちは。

アラフォーでRuby未経験ながら、Ruby技術者認定試験を取得することにしました。

 

まだ始めて一週間ほどですが、いきなりハマったとこがあるのでメモ。

a = [1,2,3]
puts a.inject{|ret,n| ret * n}

 と、ある模擬問題であったけど、injectにパラメータがない。

パラメータを省略した場合、何になるのだろうか?

勝手な予想だけど'0'だと思い、'0'に何を掛けても'0'だと思った。

しかしputsの結果が'6'となる。

これが理解できなかった。

injectの引数を指定しないと初期値は何なのか?

Rubyの参考書とかを見ても、injectはだいたい引数付きで、

indject(0)とかになっている。

結局公式リファレンスにたどり着いた。

module Enumerable (Ruby 2.1.0)

 >初期値 init を省略した場合は、 最初に先頭の要素と 2 番目の要素をブロックに渡します。

こう書いてあった。

だらか上記ソースは 1 * 2 * 3 となり6になるというわけですね。

昔からの癖で、本に書いてないとすぐハマるけど、公式リファレンスを最初に

確認するようにしないといけないなぁ。