有没有办法在Ruby中通过单个命令退出两个循环?

时间:2015-04-22 12:26:58

标签: ruby loops

以下是示例代码

while true
   while true
      exit all loops when condition true
   end
end

有人可以告诉我,当第二个循环中断时,是否可以退出第一个循环,但后来我只想使用一个break命令而没有加注。

2 个答案:

答案 0 :(得分:7)

你知道什么比只使用一个break更好吗?完全不使用任何东西! :)

很少使用throw/catch在这里很好

catch(:done) do 
  while cond1
    while cond2
      throw :done if condition
    end
  end
end

有关详细信息,请参阅throwcatch上的文档。

答案 1 :(得分:1)

好吧,显然布尔标志是禁止的。糟糕。

另一件需要注意的事情就是捕捉错误,但是你说你不想这样做,或者将它包装在一个方法中并返回。老实说,这似乎不是一种方式,但这是我能想到的最简单的方法:

catch (:exit) do
    while true
        while true
            throw :exit if condition
        end
    end
end

你可以抛出异常,但这看起来很脏。不过,这是执行此操作的代码:

begin
    while true
        while true
            raise "Exiting loops" if condition
        end
    end
rescue
    #Code to go after the loop
end

最后,您可以将整个事物包装在一个方法中并从该方法返回:

def my_descriptive_method_name()
    while true
        while true
            return if condition
        end
    end
end