gpt4 book ai didi

ruby - 在 Ruby 中克隆枚举器?

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:52 24 4
gpt4 key购买 nike

我要遍历一棵树。当我遍历它时,我保留了一堆枚举器,其中每个枚举器都用于枚举树的子级。

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

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

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

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

a = [1,2,3].each
=> #<Enumerator: [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 # => #<MyArrayEnumerator:0x101c96588 @n=0, @array=[1, 2, 3]>
a.next # => 1
b = a.dup # => #<MyArrayEnumerator:0x101c95ae8 @n=1, @array=[1, 2, 3]>
a.next # => 2
b.next # => 2

关于ruby - 在 Ruby 中克隆枚举器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com