3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個贊
這是唯一的區(qū)別:
每:
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循環(huán),迭代器變量在塊完成后仍然存在。對于each循環(huán),它不會,除非在循環(huán)開始之前已將其定義為局部變量。
除此之外for,該each方法只是語法糖。
如果@collection是nil兩個回路拋出一個異常:
例外:main:Object的未定義局部變量或方法“ @collection”

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個贊
你的第一個例子
@collection.each do |item|
# do whatever
end
更慣用了。盡管Ruby支持像for和這樣的循環(huán)結(jié)構(gòu)while,但通常首選使用塊語法。
另一個微妙的區(qū)別是,您在for循環(huán)內(nèi)聲明的任何變量都將在循環(huán)外可用,而在迭代器塊內(nèi)的變量實(shí)際上是私有的。
- 3 回答
- 0 關(guān)注
- 730 瀏覽
添加回答
舉報