【发布时间】:2012-11-07 11:26:46
【问题描述】:
我有一棵树,我正试图遍历它。在遍历它时,我保留了一堆枚举器,其中每个枚举器用于枚举树的子节点。
我希望能够复制这个枚举器堆栈并将其交给另一个对象,以便它可以从堆栈状态指示的位置开始遍历树。
当我尝试在 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
【问题讨论】:
-
致电
@dup?你的意思是打电话给dup? -
这是一项学术练习还是您会从RubyTree gem 中受益?
-
#next不是在 ruby 中使用枚举器的首选方式。我相信它是使用纤维定义的,并且堆栈帧不能被复制。你能详细说明你需要这个做什么吗?也许我们可以建议更多的 ruby 方法来解决您的问题。 -
@samuil:#next 是进行外部迭代的首选方式。是的,枚举数可以在迭代之前被复制。
-
您是否尝试使用分子进行深度优先树遍历?
标签: ruby enumerator