4

次のように列挙子を生成する関数があります。

def create_example_enumerator(starting_value)
  current = starting_value
  e = Enumerator.new do |y|
    loop do
      current += 1
      y << current
    end
  end
end

現在の動作は非常に簡単です。

> e = create_example_enumerator(0)
#<Enumerator: details>
> e.next
1
> e.next
2
> e.rewind
#<Enumerator: details>
> e.next
3

e.rewind列挙子を開始値にリセットしたいと思います。無限の列挙子を使用しながらそれを行うための良い方法はありますか?

4

1 に答える 1

5

これはうまくいくはずです:

n = Enumerator.new do |y|
  number = 1
  loop do
    y.yield number
    number += 1
  end
end

n.next #=> 1
n.next #=> 2
n.next #=> 3
n.rewind
n.next #=> 1
于 2012-11-05T20:58:35.003 に答える