区别:+和&:+

Ale*_*ton 1 ruby

我有这样的代码

 list << num if num.to_s.split("").map(&:to_i).map(&:factorial).inject(:+) == num
Run Code Online (Sandbox Code Playgroud)

它工作,我想知道如果inject没有&(&符号)前面的工作:+.我要求别人解释的差异之间有什么:+&:+.

Uri*_*ssi 6

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

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