我最近开始阅读《Programming Ruby 1.9&2.0》一书。它显示了显式枚举器的技巧
triangular_numbers = Enumerator.new do |yielder|
number = 0
count = 1
loop do
number += count
count += 1
yielder.yield number
end
end
5.times { print triangular_numbers.next, " " }
puts
我想知道为什么这个 yielder.yield 会暂时离开循环并返回number的值,直到创建下一个枚举器对象。当循环块内的 yield 时,它似乎与通常的情况不同。我查了APIdock,发现Proc.yield()的源码和Proc.call()是一样的。对于 Enumerator 类中的 Yielder 对象,Yielder 已经覆盖了 yield()。但是为什么yield.yield会暂时离开循环块呢?