我正在遍历数组,并且内部有一个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
语句终止。
答案 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
结束