2014-07-01 263 views
1

我有这样的代码之间的区别:+和:+

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

它的工作原理,我想知道如何inject作品,未经&(符号)在:+的前面。我要求某人解释:+&:+之间的区别。

+1

其中一人戴着帽子? ...对不起,忍不住 – musefan

+2

@musefan不,其中一个有头发。 – sawa

回答

5

&:+被翻译成proc,而:+是一个符号。 inject支撑器接收符号,其在内部转换为PROC:

如果指定的块,然后在枚举每个元素块是 传递一个累加器值(备忘录)和元件。 如果您改为指定 符号,则集合中的每个元素将被传递到 备忘录的命名方法。无论哪种情况,结果都会成为备忘录的新值 。在迭代结束时,备忘录 的最终值是该方法的返回值。