猿问

Ruby中的“ for”与“ each”

我只是对Ruby中的循环有一个简单的问题。这两种遍历集合的方式之间有区别吗?


# way 1

@collection.each do |item|

  # do whatever

end


# way 2

for item in @collection

  # do whatever

end

只是想知道它们是否完全相同,或者是否存在细微的差异(可能@collection是nil时)。


慕虎7371278
浏览 673回答 3
3回答

繁星coding

这是唯一的区别:每:irb> [1,2,3].each { |x| }  => [1, 2, 3]irb> xNameError: 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

你的第一个例子@collection.each do |item|  # do whateverend更惯用了。尽管Ruby支持像for和这样的循环结构while,但通常首选使用块语法。另一个微妙的区别是,您在for循环内声明的任何变量都将在循环外可用,而在迭代器块内的变量实际上是私有的。
随时随地看视频慕课网APP

相关分类

Ruby
我要回答