在Ruby中克隆一个枚举器?

我有一棵树,我正试图穿越。 当我遍历它时,我会保留一堆枚举器,其中每个枚举器用于枚举树的子节点。

我希望能够复制这个枚举器堆栈并将其交给另一个对象,以便它可以从堆栈状态指示的位置开始遍历树。

当我尝试在Enumerator上调用#dup时,出现错误。 是否可以复制枚举器? 如果没有,我怎么能完成同样的事情? (我已经将一堆整数视为指数,但我担心效率。

这里有一些代码来展示我所看到的……

第一个枚举器启动后,您无法复制它。 那是我的情况。

a = [1,2,3].each => # a.next => 1 b = a.dup TypeError: can't copy execution context from (irb):3:in `initialize_copy' from (irb):3:in `initialize_dup' from (irb):3:in `dup' from (irb):3 

实现自己的枚举器类。

除了递增内部计数器之外,调查员没有多少魔力。

 class MyArrayEnumerator def initialize(array) @ary,@n=array,0 end def next raise StopIteration if @n == @ary.length a=@ary[@n];@n+=1;a end end class Array def my_each MyArrayEnumerator.new(self) end end a = [1,2,3].my_each # => # a.next # => 1 b = a.dup # => # a.next # => 2 b.next # => 2 

请改用clone

 e1 = [1,2,3].each e1.dup # TypeError: can't copy execution context e2 = e1.clone e1.next #=> 1 e2.next #=> 1