如果在内部红宝石块中抛出异常,我有兴趣打破外部和内部块。代码可能如下所示:
catch "ExitBlock" do
foo.each_with_index do |el, idx|
bar = ... // do more stuff,
bar.each_with_index do |el1, idx1|
if some_bad_stuff
throw "ExitBlock"
end
end
end
end
如果some_bad_stuff为true,它应该退出外部块和内部块,而不仅仅是内部块。上面的代码给了我一个ArgumentError但是:
ArgumentError: uncaught throw "ExitBlock"
我做错了什么?
答案 0 :(得分:2)
它适用于符号:
catch :exit_block do
foo.each_with_index do |el, idx|
bar = ... // do more stuff,
bar.each_with_index do |el1, idx1|
if some_bad_stuff
throw :exit_block
end
end
end
end
但是文档说 "[argument] can be an arbitrary object, not only Symbol"
我不知道发生了什么。
答案 1 :(得分:0)
只是打破循环而不是将异常带入混合中会更加清晰:
foo.each_with_index do |el, idx|
bar = ... // do more stuff,
break_outer = false
bar.each_with_index do |el1, idx1|
if some_bad_stuff
break_outer = true
break
end
end
if break_outer
break
end
end