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