test = [1,2,3]
test.each do |num|
def internalHelper
for i in 0..3
for j in 0..3
puts "this should happen only 3 times"
if true
return
end
end
end
end
internalHelper
end
for i in (1 .. 5)
next_outer_loop = false
for j in (1 .. 5)
if j > i
next_outer_loop = true if j % 2 == 0
break
end
puts "i: #{i}, j: #{j}"
end
print "i: #{i} "
if next_outer_loop
puts "with 'next'"
next
end
puts "withOUT 'next'"
end
“打破”外部循环
for i in (1 .. 5)
break_outer_loop = false
for j in (1 .. 5)
if j > i
break_outer_loop = true if i > 3
break
end
puts "i: #{i}, j: #{j}"
end
break if break_outer_loop
puts "i: #{i}"
end
8条答案
按热度按时间8iwquhpp1#
以
throw
/catch
为例。通常情况下,下面代码中的外部循环将运行五次,但通过throw,您可以将其更改为您喜欢的任何内容,并在过程中中断它。考虑一下这段完全有效的ruby代码:ogq8wdun2#
你想要的是非本地控制流,Ruby有几个选项可以做到这一点:
throw
/catch
继续
优点:
GOTO
的更好的双胞胎。缺点:
我知道了
优点:
缺点:
throw
/catch
这是(大致)它看起来的样子:
优点:
StopIteration
异常来终止。缺点:
uinbv5nw3#
不没有
您的选择是:
km0tfn4u4#
或者“break if do_break”,取决于你想要什么
rnmwe5a25#
或许这就是你想要的?(未测试)
find方法会一直循环,直到块返回一个非空值或者到达列表的末尾。
eqfvzcg86#
在循环周围 Package 一个内部方法可以做到这一点。
在这里,你可以在任何for循环中进行检查,并在条件满足时从内部方法返回。
b0zn9rqh7#
我知道我会在早上后悔,但简单地使用一个while循环可以做到这一点。
if y==5 && x==3
只是表达式变为true的一个例子。7uzetpgm8#
您可以考虑添加一个标志,该标志在内部循环中设置,用于控制外部循环。
'next'外部循环
“打破”外部循环