はるか昔に書いた
http://d.hatena.ne.jp/Nabetani/20070510/p1
が、ruby 2.1.0 では動かないようなので、書きなおした。
def f(name,n) Fiber.new do loop do (n-1).times{ Fiber.yield "" } Fiber.yield name end end end def fb(sup, *x) s=x.map{|name,n| f(name,n)} 1.upto(sup) do |n| yield( (r=s.map{|x|x.resume}.join).empty? ? n : r ) end end fb( 100, [ 'Fizz', 3], [ 'Buzz', 5 ] ) do |s| puts s end
Generator がなくなって Fiber になったらしいので、それに関する対応。
ほかにも多少変更したけど。