Ruby Enumerator 的一个问题

shangrenzhidao · 2014年09月19日 · 最后由 cicholgricenchos 回复于 2015年06月04日 · 1876 次阅读
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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号