区别:+和&:+

时间:2014-07-01 08:50:32

标签: ruby

我有这样的代码

 list << num if num.to_s.split("").map(&:to_i).map(&:factorial).inject(:+) == num

它有效,我想知道inject如何在&前没有:+(&符号)的情况下工作。我要求有人解释:+&:+之间的差异。

1 个答案:

答案 0 :(得分:5)

&:+被翻译为proc,而:+是一个符号。 inject支持接收符号,内部转换为proc:

  

如果指定一个块,则对于枚举中的每个元素,该块为   传递了累加器值(memo)和元素。 如果您指定了   而是符号,然后将集合中的每个元素传递给   命名的备忘录方法。在任何一种情况下,结果都成为新的   备忘录的价值。在迭代结束时,备忘录的最终值   是方法的返回值。