代码之家  ›  专栏  ›  技术社区  ›  Skilldrick

在Ruby中“for x in y”有什么意义?

  •  13
  • Skilldrick  · 技术社区  · 14 年前

    我正在学习Ruby和RoR,我发现:

    <% for post in @posts %>
    

    Rails guide . 我知道在Ruby中这样做的惯用方法是:

    <% @posts.each do |post| %>
    

    我刚刚发现了两个相互矛盾的解释: Tutorials Point 表示它们是相同的,只是“for循环不会为局部变量创建新的作用域”,而 CS.Auckland.ac.NZ for 只是对等词的语法糖 .each .

    编辑2: 这个 for ... in 问题在于 index.html.erb 生成于 app/views/posts 通过 script/generate scaffold . 我做了一个快速检查,现在生成 .每个 语法。我猜这部分指南是在rails开发的早期阶段编写的,当时scaffold生成了 .

    编辑3: 我现在可以确认了 for x in y 在Rails2.2.2中使用,但在2.3.8中使用 y.each do |x| . 只是想让你知道。

    5 回复  |  直到 14 年前
        1
  •  21
  •   sepp2k    14 年前

    教程点页面是正确的, for 相当于 each 除了范围的不同。下面是一个演示:

    arr = [1,2,3]
    arr.each do |x|
      last = x
    end
    last # NameError
    

    与。

    arr = [1,2,3]
    for x in arr
      last = x
    end
    last #=> 3
    

    如果你想用 ,你需要做什么 last = nil 在循环之前。正如链接所指出的,这是因为块在 没有。

    但是请注意,这很少有实际意义,甚至很少有人意识到这一点。

    当人们使用 对于 对于 .

        2
  •  0
  •   P Shved    14 年前

    问题是第一个例子( for post in @posts )看起来更“程序化”,而第二个( @posts.each do |post| )看起来更“实用”。不幸的是,程序化的代码读取方式仍然被认为更流行,更清晰,更不“怪胎”。这就是为什么,也许,许多人更喜欢它而不是遍历容器的“本机”方式。

    如果它看起来像python(我不确定它是否是真的),那么它可能会被认为更好,因为它提高了来自其他平台的开发人员对Rails的可访问性。

    就我个人而言,我希望ruby和“功能性”的方式得到推广。但上述理由表明,这两种方法都可以做到。

        3
  •  0
  •   skalee    14 年前

    有一天,我正在开发为我正在开发的网站生成PDF报告的功能。

    我使用的插件有很多限制。这些限制迫使我提出了非常必要和程序性的解决办法。我用的是 while for 只是为了强调这种编程风格。

        4
  •  0
  •   Community CDub    7 年前

    for x in y 如果您正在尝试进行ruby评测,而您的ruby prof版本没有 method elimination .

        5
  •  0
  •   Paul Hoffer    14 年前

    还有一件事 for x in y 你能做到吗 for i in 1..5 这就像循环的标准,从 i = 1 经历了 i = 5 .

    最方便的是你可以使用像 3..8 x..y ,你不会被困在从零开始的地方,你会用 n.times