为什么以下代码可以正常运行

p (1..1000).inject(0) { |sum, i|
    sum + i
}

但是,以下代码给出了一个错误
p (1..1000).inject(0) do |sum, i|
    sum + i
end

warning: do not use Fixnums as Symbols
in `inject': 0 is not a symbol (ArgumentError)

它们不应该等效吗?

最佳答案

使用花括号写的代码块绑定(bind)到您打算使用的inject方法,并且可以正常工作。

但是,封装在do / end块中的块将绑定(bind)到p方法。因此,inject调用没有关联的块。在这种情况下,inject会将参数(在这种情况下为0)解释为要在每个对象上调用的方法名称。 Bacuase 0不是可以转换为方法调用的符号,这将产生警告。

关于ruby - Ruby打印注入(inject)语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2127836/

10-16 12:56