为了账号安全,请及时绑定邮箱和手机立即绑定

Ruby中的“ for”与“ each”

Ruby中的“ for”与“ each”

慕虎7371278 2019-11-11 14:39:46
我只是对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”


查看完整回答
反对 回复 2019-11-11
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

你的第一个例子


@collection.each do |item|

  # do whatever

end

更惯用了。尽管Ruby支持像for和这样的循环结构while,但通常首选使用块语法。


另一个微妙的区别是,您在for循环内声明的任何变量都将在循环外可用,而在迭代器块内的变量实际上是私有的。


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 620 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信