Tag: iterator

在Ruby中,你可以使用lambda或proc调用方法来调用迭代器吗?

我想创建一个迭代器,我可以传递给方法来调用。 #!/usr/bin/env ruby puts “————————————” puts “1 This works.” puts “————————————” 1.times {|who| puts “Position #{who} works!”} puts “————————————” puts “2 This works.” puts “————————————” aBlock = Proc.new { |who| puts “Position #{who} also works!” } 2.times &aBlock puts “————————————” puts “3 This works.” puts “————————————” def eachIndex 3.times { |i| yield i } end […]

Ruby的Enumerator对象如何在内部迭代器上进行外部迭代?

根据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 鉴于Enumerator对象在调用next时使用each方法来回答,每次调用next时,如何调用each方法? Enumeartor类是否预先加载o.each的所有内容并为枚举创建本地副本? 或者是否有某种Ruby魔术在每个yield语句中挂起操作,直到在enumeartor上调用next? 如果制作了内部副本,它是否是深层副本? 那些可以用于外部枚举的I / O对象呢? 我正在使用Ruby 1.9.2。