我有这样的代码
list << num if num.to_s.split("").map(&:to_i).map(&:factorial).inject(:+) == num
它有效,我想知道inject
如何在&
前没有:+
(&符号)的情况下工作。我要求有人解释:+
和&:+
之间的差异。
答案 0 :(得分:5)
&:+
被翻译为proc,而:+
是一个符号。 inject
支持接收符号,内部转换为proc:
如果指定一个块,则对于枚举中的每个元素,该块为 传递了累加器值(memo)和元素。 如果您指定了 而是符号,然后将集合中的每个元素传递给 命名的备忘录方法。在任何一种情况下,结果都成为新的 备忘录的价值。在迭代结束时,备忘录的最终值 是方法的返回值。