我原以为Enumerable#inject会像其他方法一样返回一个枚举器,并向它传递一个块;但它正在抛出错误。在pry中尝试了以下操作:

>> numbers = (1..12)
=> 1..12
>> numbers.each_with_index
=> #<Enumerator: ...>
>> numbers.each_with_index.map
=> #<Enumerator: ...>
>> numbers.inject(0)
TypeError: 0 is not a symbol
from (pry):18:in `inject'

我想用它如下:
numbers = (1..12)
block = lambda { |sum, digit| sum + digit }

numbers.inject(0) { |sum, digit| sum + digit } # => 78
numbers.each_with_index.map &block # => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
numbers.inject(0) &block # => 0 is not a symbol (TypeError)

这样的实施有什么原因吗?

最佳答案

从概念上讲,Enumerator是一种集合。Enumerable#inject在集合的成员之间累积一个值,它返回Enumerator没有什么意义。
您可以将numbers.inject(0) &block更改为:

numbers.inject(0, &block)

关于ruby - 为什么Ruby inject不返回枚举数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28359346/

10-14 19:44