无限枚举者倒带

时间:2012-11-05 20:47:08

标签: ruby enumerator

我有一个以下列方式生成枚举器的函数:

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将枚举器重置为它的起始值。 在使用无限枚举器时有没有一种很好的方法呢?

1 个答案:

答案 0 :(得分: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