Ruby/Enumerator
Fiberで実装されている
code:rb
class Foo : Enumerable
def each(&block)
...
block.call(x)
...
end
end
があるとき、
enu = Foo.new.to_enum
で外部イテレータ(Enumerator)が取れて、.nextとか、.lazy.mapとかができる
to_enumの実装にFiberが使われている(とおもう)
上記のeach自体に状態を止める機能はないが、block内でFiber.yieldすることでeachの途中で別Fiberに制御を移すことができる
code:txt
fun Foo#each(block, cont)
...
fun Foo#each_while(block, cont)
...
block(cont)