在Eloquent Ruby(第 21 页,第一版,第六次打印) 一书中,作者 (Russ Olsen) 提倡使用 each
方法而不是 for
循环,这与我在其他地方读到的所有内容一致。
但是作者还继续说,这样做的一个原因是 for
循环实际上调用了 each
方法,所以为什么不直接删掉中间人并使用 each
?所以我想知道这实际上是如何工作的。
为了调查,我确实在 github 上的 Ruby 存储库上进行了搜索,但发现很难确定我在哪里/如何看到它的实际效果。
重述问题:
我如何证明 Ruby for
循环实际上是使用 each
方法实现的?
最佳答案
您可以通过编写一个实现每个的类来展示它:
# 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
您将再次看到打印的消息。
关于ruby - 如何证明 Ruby `for` 循环实际上是使用 `each` 方法实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839809/