我只是對Ruby中的循環有一個簡單的問題。這兩種遍歷集合的方式之間有區別嗎?# way [email protected] do |item| # do whateverend# way 2for item in @collection # do whateverend只是想知道它們是否完全相同,或者是否存在細微的差異(可能@collection是nil時)。
3 回答

繁星coding
TA貢獻1797條經驗 獲得超4個贊
這是唯一的區別:
每:
irb> [1,2,3].each { |x| }
=> [1, 2, 3]
irb> x
NameError: undefined local variable or method `x' for main:Object
from (irb):2
from :0
對于:
irb> for x in [1,2,3]; end
=> [1, 2, 3]
irb> x
=> 3
通過for循環,迭代器變量在塊完成后仍然存在。對于each循環,它不會,除非在循環開始之前已將其定義為局部變量。
除此之外for,該each方法只是語法糖。
如果@collection是nil兩個回路拋出一個異常:
例外:main:Object的未定義局部變量或方法“ @collection”

幕布斯6054654
TA貢獻1876條經驗 獲得超7個贊
你的第一個例子
@collection.each do |item|
# do whatever
end
更慣用了。盡管Ruby支持像for和這樣的循環結構while,但通常首選使用塊語法。
另一個微妙的區別是,您在for循環內聲明的任何變量都將在循環外可用,而在迭代器塊內的變量實際上是私有的。
- 3 回答
- 0 關注
- 723 瀏覽
添加回答
舉報
0/150
提交
取消