Ruby Enumerator 的一个问题

shangrenzhidao · September 19, 2014 · Last by cicholgricenchos replied at June 04, 2015 · 1867 hits
triangular_numbers = Enumerator.new do |yielder|
 number = 0
count = 1
loop do
    number += count
    count  += 1
    yielder.yield number
end 
end

这是《ruby programming language》这本书上的一个例子程序,triangular_numbers 可以随着外部调用的次数而增长,我不明白的是:块中的 loop 是如何跑的,是不是外部调用一次 next,然后 loop 就继续跑一次呢?

据说是利用Fiber来实现的

和代码块中的 yield 类似,在 yield 出去的时候,代码块内的代码执行就暂停了,每次拿 next 的时候都会要求这个代码块 yield 出一个值。至于本质上的实现和 Fiber 有关系,我从这看的http://stackoverflow.com/questions/9052621/why-do-we-need-fibers

You need to Sign in before reply, if you don't have an account, please Sign up first.