【问题标题】:IF condition is met, start loop at beginning (Ruby)IF 条件满足,开始循环(Ruby)
【发布时间】:2013-08-15 04:35:39
【问题描述】:

使用 ruby​​ 1.9.3,我需要执行以下操作:

test_ids.each do |x|
    if x == 1
        y = x+1
    elsif x == 2
        y = x+2
    elsif x == 3
        (end loop here, start over with next test_id)
    else
        y = x+4
    end
end

如果满足条件,我只需要循环继续数组中的下一个对象,而不是在整个脚本中继续。这怎么可能?

编辑:

最终目标是这样的:

case x
    when 1
        abort
    when 2
        ...
    else
        ...
end

puts x+2

如您所见,x 在 if case 语句之后使用。如果x = 1,我不需要运行puts 语句。我不想abort 脚本并完全终止它,我只想跳过该数组对象并转到下一个。有什么建议吗?

【问题讨论】:

  • 我怀疑这是否符合您的预期。 =x 赋值,因此您的代码仅在循环内执行 x = 1。相反,您需要使用 == 进行比较。
  • 重要的是要了解,鉴于您拥有的代码,next 不会有什么特别之处。一旦elsif x == 3 匹配并且您的代码落入该块,当它退出时它将落入并隐式执行next。唯一需要 next 的情况是,如果在您想要避免的 end 语句之后还有其他代码。不会执行其他 elsif 语句,也不会发生 else

标签: ruby arrays loops conditional


【解决方案1】:

=x 赋值,因此您的代码仅在循环内执行x = 1

相反,您需要在 if 语句中使用 == 进行比较。

您可以使用case 语句避免这种情况:

case x
when 1
  ...
when 2
  ...
when 3
  ...
else
  ...
end

根据我使用case 的经验,与使用多个if/else/elsif 相比,代码更清晰。

【讨论】:

  • 确实,我刚刚离开了我的==。我同意案例更可取,感谢您的提示。不过我还是有点困惑。我编辑了我的问题以获得更多说明。
【解决方案2】:

您正在寻找next 命令。

test_ids.each do |x|
  if x == 1
    y = x+1
  elsif x == 2
    y = x+2
  elsif x == 3
    next
  else
    y = x+4
  end
end

【讨论】:

  • 啊,next。很简单。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多