根据 Ruby 的文档,如果没有为or方法each
提供目标方法,则 Enumerator 对象使用该方法(枚举)。现在,让我们以下面的猴子补丁及其枚举器为例to_enum
enum_for
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
loop do
puts e.next
end
鉴于 Enumerator 对象在被调用each
时使用方法来回答,那么对方法的调用看起来如何,每次被调用?Enumeartor 类是否预加载了枚举的所有内容并创建了本地副本以进行枚举?或者是否有某种 Ruby 魔法可以在每个 yield 语句处挂起操作,直到在 enumeartor 上被调用?next
each
next
o.each
next
如果制作了内部副本,是否是深层副本?可用于外部枚举的 I/O 对象呢?
我正在使用 Ruby 1.9.2。