Ruby 中的 for 与 each
Stewart Nguyen
2023年1月30日
Ruby
Ruby Loop
在 Ruby 中,你可以使用 Array#each 和 for..in 来遍历数组。但是,两者之间存在显着差异。
Ruby 中的 Array#each
Ruby Array#each 方法是最直接且广泛使用的迭代数组中单个项目的方法。
each 是 Array 类的内置方法,它是最流行的迭代 Ruby 数组中项目的方法。
each 将块作为参数并返回当前项。
[1, 2, 3].each { |n| puts n }
输出:
1
2
3
Ruby 中的 for..in 循环
与大多数其他编程语言一样,Ruby 有一个用于循环数组的 for 语句。
for 后跟一个作为当前元素的变量和一个迭代数组。
for n in [1, 2, 3]
puts n
end
输出:
1
2
3
在引擎盖下,Array#each 和 for..in 几乎做同样的事情。但是,有一个微小的差异,可能会导致严重的问题。
[1, 2, 3].each { |n| n }
puts n
输出:
NameError (undefined local variable or method `n' for main:Object)
代码示例:
for n in [1, 2, 3]
n
end
puts n
输出:
3
如果我们尝试在 Array#each 之后打印 n,我们会得到一个错误,但它会在 for 循环之后打印 3。
这是怎么回事?
在执行 for..in 之前,变量 n 是预先定义的。块完成后,它在块外仍然可见。
换句话说,for 循环类似于:
n = nil
[1, 2, 3].each { |i| n = i }
puts n
输出:
3
在 Array#each 的情况下,变量 n 定义在块 { |n| puts n },因此它对块范围之外的任何东西都不可见。
使用 for 循环可能会引入额外的变量作为副作用,从而导致令人沮丧的问题。结果,Array#each isprefered 胜过 for..in。
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe