在书里Eloquent Ruby(第 21 页,第一版,第六次印刷),作者(Russ Olsen)主张使用each
方法而不是for
循环,这与我在其他地方读到的所有内容一致。
然而,作者还接着说,这样做的原因之一是for
循环实际上调用了each
方法,那么为什么不直接去掉中间人并使用each
?所以我想知道这实际上是如何运作的。
为了进行调查,我确实在 github 上的 Ruby 存储库上进行了搜索,但发现很难确定在哪里/如何看到它的实际情况。
重申一下问题:
我怎样才能显示红宝石for
循环实际上是使用each
method?
您可以通过编写一个实现每个的类来展示它:
# Demo that for calls each
class ThreeOf
def initialize(value)
@value = value
end
def each(&block)
puts "In Each"
block.call(@value)
block.call(@value)
block.call(@value)
end
end
然后创建一个实例并在 for 循环中使用它:
collection = ThreeOf.new(99)
for i in collection
puts i
end
运行它,您将看到打印出的消息,并且 for“循环”将循环三遍。
或者(更有趣)你可以猴子修补内置的 Array 类:
class Array
alias_method :orig_each, :each
def each(*args, &block)
puts "Array Each called!"
orig_each(*args, &block)
end
end
puts "For loop with array"
for i in [1,2,3]
puts i
end
您将再次看到打印的消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)