coroutine by Generator
public ruby v1 · immutablerequire 'generator' def coroutine(m, *args) Generator.new {|g| m.call(*args) {|x| g.yield x} }enddef generate_fibonacci(a, b) loop do yield a a, b = b, a + b endendfibonacci = coroutine(method(:generate_fibonacci), 1, 1)10.times do puts fibonacci.nextend