我原以为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/