什么是记忆如何调用ruby注入的助记符?

时间:2013-04-24 22:00:55

标签: ruby

我永远不会记得它的

array.inject{|memo,obj| block}

array.inject{|obj,memo| block}

有没有人有记住订单的好方法?

4 个答案:

答案 0 :(得分:6)

inject / reduce只是left fold(在其他语言中称为foldl / foldLeft),就是这样,递归左关联元素与二元运算符的组合:

(1..5).reduce(:+) == (((1 + 2) + 3) + 4) + 5 #=> true
(1..5).reduce(:-) == (((1 - 2) - 3) - 4) - 5 #=> true

因此,累加器作为块的左/第一个参数传递是很自然的。在右侧折叠处,累加器将是正确/第二个参数。

不是真正的助记符,但是一旦你意识到reduce是左折,你就不会忘记累加器的去向。

答案 1 :(得分:2)

它与each_with_object相反,我确实记得(首先是each,然后是object)。

答案 2 :(得分:1)

如果你真的认为它操纵了memoobject那么它就是按字母顺序排列的:

array.inject{|memo,obj| block}

你的助记符是备忘录按字母顺序出现在对象之前。

答案 3 :(得分:0)

  

使用短块注入时,请将参数命名为| 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