とりあえず準備体操。
require 'enumerator' class Fib def fib a = 1 b = 1 loop do yield(a) tmp = a; a = b; b = tmp + b; end end end fib = Fib.new.enum_for(:fib) g = fib.each 10.times do p g.next end
クラスを定義しないですむと、もう少しかっこいいなぁ。
~/work$ ruby foo.rb
1
1
2
3
5
8
13
21
34
55
いろいろ使えそう…な気はする。
追記
クラスを定義しないでみた。でもlambdaが使いたい…
require 'enumerator' def fib a = 1 b = 1 loop do yield(a) tmp = a; a = b; b = tmp + b; end end g = enum_for(:fib).each 10.times do p g.next end