我永遠記得,如果其記住如何調用紅寶石注入的助記符是什麼?
array.inject{|memo,obj| block}
或
array.inject{|obj,memo| block}
沒有人有記憶的順序一個很好的把戲?
我永遠記得,如果其記住如何調用紅寶石注入的助記符是什麼?
array.inject{|memo,obj| block}
或
array.inject{|obj,memo| block}
沒有人有記憶的順序一個很好的把戲?
inject
/reduce
不過是left fold(因此稱爲在其他語言foldl
/foldLeft
),就是這樣,用二元運算符元素的遞歸左結合組合:
(1..5).reduce(:+) == (((1 + 2) + 3) + 4) + 5 #=> true
(1..5).reduce(:-) == (((1 - 2) - 3) - 4) - 5 #=> true
所以這隻有當累加器作爲塊的左/第一個參數傳遞時纔是自然的。在右邊的fold中,累加器就是右/第二個參數。
不是一個真正的助記符,但一旦你意識到reduce
是一個左邊的摺疊,你不會忘記累加器的位置。
當使用短塊注入時,將參數| a,e | (助記:蓄電池,元素)
或
不是很好,但它可以幫助我: 「備忘錄」 是第一位的(按字母順序),所以它是 注入(備忘錄,OBJ)
[1, 2, 3, 4, 5, 6].inject([]) do |result, elm|
result << elm * 2 if elm % 2 == 0
result
end
# => [4, 8, 12]
那麼,什麼是該做的?用英文輸入是:
從某個對象(我們的空數組)開始,然後將我們調用者中的每個元素([1,2,3,4,5,6])傳遞給該塊。提供塊可以自由更改的結果對象。結果從我們的第一個參數(空數組)開始,然後變成塊最後評估的結果。
進一步詳情Here
這是each_with_object
反轉,這一點我設法記住(第一each
,那麼object
)。
如果你真的認爲它操縱memo
和object
的則是按字母順序排列:
array.inject{|memo,obj| block}
你的記憶是對象之前備忘錄來按字母順序。
http://ruby-doc.org/core-2.0/Enumerable.html#method-i-inject? – 2013-04-24 22:04:11
這也是激發[我的問題]的想法(http://stackoverflow.com/questions/16123680/switching-the-receiver-and-the-argument-of-enumerableinject)。 – sawa 2013-04-25 08:23:28