【发布时间】:2012-06-18 21:50:45
【问题描述】:
根据 Ruby 的文档,如果没有为 to_enum 或 enum_for 方法提供目标方法,则 Enumerator 对象使用 each 方法(用于枚举)。现在,让我们以下面的猴子补丁及其枚举器为例
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
loop do
puts e.next
end
假设在调用next 时,Enumerator 对象使用each 方法来回答,那么每次调用next 时,对each 方法的调用是什么样的? Enumeartor 类是否预加载了o.each 的所有内容并创建了一个本地副本进行枚举?或者是否有某种 Ruby 魔法可以在每个 yield 语句处挂起操作,直到在枚举器上调用 next?
如果制作了内部副本,是否是深层副本?可用于外部枚举的 I/O 对象呢?
我使用的是 Ruby 1.9.2。
【问题讨论】:
-
请注意,您在文本周围使用反引号 ( ` ) 来进行内联代码格式化
:) -
非常感谢!下次会记住这一点。
标签: ruby iterator enumerator