跳转到外循环的下一次迭代

时间:2014-07-26 06:42:37

标签: ruby-on-rails ruby loops ruby-on-rails-4

我有以下代码:

quantity.times do
  ids.each_with_index do |id, index|
    #a bunch of nested if/thens
    if index == 0
      do something else
      send termination email
    end
  end
end

基本上,如果发送终止电子邮件,我只希望它发送ONCE,无论ids数组中有多少项。一旦发送,我想在quantity times循环中输入下一个数字。当然,如果未发送终止电子邮件并执行其他操作,则可以继续循环遍历ids数组。

我现在的工作原理,因为我使用index==0只触发一次电子邮件,但我想进一步简化。

我知道next方法1,但我明白跳转到内循环的下一次迭代,在这种情况下是ids.each循环,这不是我的意思想。

3 个答案:

答案 0 :(得分:3)

您可能正在寻找中断关键字。

for i in 0..5
   if i > 2 then
      break
   end
   puts "Value of local variable is #{i}"
end

这将产生以下结果:

Value of local variable is 0
Value of local variable is 1
Value of local variable is 2

答案 1 :(得分:1)

quantity.times do
  ids.each_with_index do |id, index|
    #a bunch of nested if/thens
      break if send termination email
  end
end

希望它有所帮助。

答案 2 :(得分:0)

这可能有点多余,但为了更好地理解你的问题,我做了:

quantity = 2
ids = ["a", "b"]

quantity.times do
  puts "outer loop"
  ids.each_with_index do |id, index|
    puts "inner loop"
    # a bunch of nested if/thens
    if index == 0
      puts "do something else"
      puts "send termination email"
      break
    end
  end
end

输出结果为:

outer loop
inner loop
do something else
send termination email
outer loop
inner loop
do something else
send termination email

如果我取消休息,输出将变为:

outer loop
inner loop
do something else
send termination email
inner loop
outer loop
inner loop
do something else
send termination email
inner loop

这有效地节省了一些内循环迭代。这是你在找什么?