方法
sequence = Enumerator.new(1..Float::INFINITY) # (1..Float::INFINITY).each でも可
sequence.next #=> 1
sequence.next #=> 2
sequence.next #=> 3
連番をインクリメントせずに sequence
から現在の値を取得したい場合は Enumerator#next の代わりに Enumerator#peek を使えばよいです。
さらにシンプルで素晴らしい方法
@yancya さんにコメントで教えて頂きました!感謝
sequence = 1.step
sequence.next #=> 1
sequence.next #=> 2
sequence.next #=> 3
Numeric#step をブロック無しで呼んだ場合は Enumerator オブジェクトを返します。その結果、上で紹介した方法と同じ挙動になります。
ついでに
Enumerator については過去に
Enumerable を include する代わりに Enumerator オブジェクトを活用する
という記事も書きましたので、ご興味があればこちらも合わせてどうぞ。