无限枚举者倒带

wrh*_*all 4 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
Run Code Online (Sandbox Code Playgroud)

目前的行为非常简单.

> e = create_example_enumerator(0)
#<Enumerator: details>
> e.next
1
> e.next
2
> e.rewind
#<Enumerator: details>
> e.next
3
Run Code Online (Sandbox Code Playgroud)

我想将e.rewind枚举器重置为它的起始值.有没有一种很好的方法可以在使用无限枚举器的同时做到这一点?

Zac*_*emp 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
Run Code Online (Sandbox Code Playgroud)