我只是对Ruby中的循环有一个简单的问题。这两种遍历集合的方式之间有区别吗?# way 1@collection.each 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 关注
- 672 浏览
添加回答
举报
0/150
提交
取消