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 回答