>> def test2 >> yield >> yield >> yield >> end => nil >> test2{x ||= 0; puts x+= 1} 1 1 1 => nil
对比一下python的yield:
def fib(): x, y = 0, 1 while 1: x, y = y, x+y yield x g = fib() for i in range(9): print g.next(),
显然python的generator是lazy的,不是简单的调用/返回。
ruby要完成同样的lazy效果的话,得借助于callcc实现的 coroutine,光靠yield是办不到的。