如何在for循环中退出if语句

时间:2018-10-26 22:55:44

标签: ruby loops if-statement break

我正在遍历数组,并且内部有一个if语句。

[1, 2, 3, 4, 5, 6, 7, 8, 9].each do |i|
  if i == 4
    p i
    break
  end
  if i > 6
    p i
  end
end

如果i,我想打印i == 4,然后中断,但仍继续执行第二个if语句。我如何才能退出if语句,但不能退出for循环,而仍然在if块之后运行其余代码?

在我的真实情况下,我有一个矩阵:

  1     2     3     4     5 
  _     ♙     _     9     _ 
 11    12    13    14    15 
 16     _    18    19    20 
 21    22    23    24     _ 

说我当前的位置是[1][1]。当我检查下一个元素时 (row + i, col),我想增加一个值。但是,当我遇到'_'时,说[3][1],我应该从if语句终止。

3 个答案:

答案 0 :(得分:2)

  

我知道一个简单的解决方法就是删除中断。但是主要的问题是,如何才能从一个if语句中断开,而仍然转到第二个if语句中。

删除break

break语句中无需if。它们不是循环。如果条件成立,则运行一次代码块,然后继续。

this = 42

if this < 40
  p "less than 42"
end

if this > 40
  p "greater than 40"
end

p "after the ifs"

这将打印。

"greater than 40"
"after the ifs"

答案 1 :(得分:1)

“从if打破”也许是“中断if身体的执行”?

if condition
  puts 'doing something'
  # "break" here
  puts 'doing something else'
end

如果是这样,可以这样做:

catch(:break_from_if) do
  if condition
    puts 'doing something'
    throw :break_from_if
    puts 'doing something else'
  end
end

请注意动词:可以完成,但永远不能完成(在任何重要的代码中)

答案 2 :(得分:0)

也许我缺少一些东西。不幸的是,我不能完全确定我是否理解您的问题和您使用的术语。下面确保“ i> 6”没有副作用,在相同的if块中,我们使用elsif执行下一个检查。如果我理解正确的话,在这里您希望将效果移到列表中的下一项。您可以使用“ next”来实现。

[1,2,3,4,5,6,7,8,9].each do |i|
  if i > 6
    p i
  elsif i == 4
    p i
    next
  end
end

结束