2016-09-17 11 views

回答

6

让从文档中考虑的示例代码:

# bad 
result = (1..4).reduce(0) do |acc, i| 
    next if i.odd? 
    acc + i 
end 

如果你尝试这种在控制台,你会得到NoMethodError例外的nil对象。这是因为如果没有指定对象,next“返回”nil。对于迭代器,您可以将其视为return

对于reduce method它可能会导致一些意外的行为,因为它需要块返回一些值。如果i是奇数,则对next进行评估,并将块作为结果给出nil。在下面的迭代器中,acc等于nil,它不能为其添加整数。在我们的例子中,作为块的结果,第一次迭代是i = 1next集合accnil

在某些情况下,您可以为enumerable获得正确的值,但通常在里面指定next的值会更安全。

+0

感谢您的详细的答案! –

+0

这并不回答这个问题,但问题可能是失去(无题,需要意见)。 –