For loop 有没有允许突破多个循环的语言?

For loop 有没有允许突破多个循环的语言?,for-loop,break,goto,For Loop,Break,Goto,break在大多数语言中中断for循环,但在嵌套循环的情况下,我从未遇到过n阶中断。 1.任何语言中都有这样的东西吗? 2.如果是,正确的名称是什么? 3.如果没有,原因是什么? 注意。我不是在寻找解决办法 关于第3点。我所知道的最接近的事情是goto,不应该使用它,因为它会导致意大利面代码(Python只在笑话模块中有它),但这似乎是一个不同的问题,作为一个布尔变量来标记内部中断,捕捉自定义错误引发的错误或将块移动到函数以使用返回中断要复杂得多(就代码中的行号和变量而言) (这是一个从理论角度

break
在大多数语言中中断for循环,但在嵌套循环的情况下,我从未遇到过n阶中断。
1.任何语言中都有这样的东西吗?
2.如果是,正确的名称是什么?
3.如果没有,原因是什么?
注意。我不是在寻找解决办法

关于第3点。我所知道的最接近的事情是
goto
,不应该使用它,因为它会导致意大利面代码(Python只在笑话模块中有它),但这似乎是一个不同的问题,作为一个布尔变量来标记内部中断,捕捉自定义错误引发的错误或将块移动到函数以使用返回中断要复杂得多(就代码中的行号和变量而言)

(这是一个从理论角度看的好奇问题,但是如果它有帮助,我主要在Python、Matlab和JS中编码。我知道Perl、Pascal和Basic,但是我只知道C++的基础知识,并且知道机器代码的可耻性。)< /P> < P> java有一个标记的断言语句,它可以让你从任意数量的循环中跳出:

search:
    for (i = 0; i < arrayOfInts.length; i++) {
        for (j = 0; j < arrayOfInts[i].length;
             j++) {
            if (arrayOfInts[i][j] == searchfor) {
                foundIt = true;
                break search; // <<=== This statement breaks both nested loops
            }
        }
    }
搜索:
对于(i=0;ibreak search;//我不知道有哪种语言可以让你这么做(除了@dasblinkenlight示例-并不是说没有),但是你可以很容易地用任何带有
break
语句的语言来模拟它

即布尔退出循环变量上的条件中断

var exitLoops = false;
for (var i = 0; i < x; i++) {
    for (var j = 0; j < y; j++) {
        for (var k = 0; k < z; k++) {
            if (something) {
                exitLoops = true;
                break;
            }
        }
        if (exitLoops) break;
    }
    if (exitLoops) break;
}
var exitLoops=false;
对于(变量i=0;i
没有(据我所知)。为什么?因为如果您需要同时退出多个嵌套for循环,那么您就会遇到代码设计问题,而不是语法问题。除了@PinkTurtle之外,上面给出的所有答案都使用某种goto语句,这是不推荐的。

在JavaScript中,您可以做到这一点。

在Chrome开发控制台上复制粘贴以下内容

free: 
for(var i=0; i<10; i++) {
  for(var j=0; j<10; j++) {
    for(var k=0;k<10;k++){
      console.log('I am at i='+i+' , j='+j+ ' , k='+k);
      if(k==3) { 
        console.log('I will now break FREE...');
        break free;
      }
    }
  }
}

console.log('... And Now I am Here...')

和Javascript一样,正在讨论将其包含到C中。有趣的是,它被标记了——并回答了我的问题。我本以为一个数字参数将for循环指定为
break
将是一个解决方案,但我可以预见off by one问题可能是一个问题。加上
goto
标签语法(忽略旧的goto行号语言)是预先存在的。因此,通电的
中断
本质上没有什么错误,只需指定中断的位置就成为必要。快速搜索后,我在python中找到了这些答案(但我认为它也适用于其他语言。而且,基本上两种语言谈论的是同一件事。“goto,不应该使用”这是有争议的。Dijkstra心目中的意大利面代码是当时的多入口多出口代码块。在今天的结构化循环(if、until、do、when等)之上,在需要的地方使用goto是完全可以的.--Common Lisp将return命名为@WillNess。对不起,我认为这是一个有争议的东西,有着强烈的共识(例如Perl是一种死了的/正在消亡的语言)-goto甚至有一个![草图]。实际上,我认为如果使用得当,
goto
非常方便,我真的不喜欢Python缺少它以避免滥用。因此,我很高兴我错了。@MatteoFerla嘿,我的个人意见只是我的个人意见!:)我看过几次这样的话,对我来说也很有意义。所以,也许说得更好“goto,不要随便使用”之类的话,“在需要的地方使用goto完全可以。”"->Dijkstra考虑的真正问题是,每个人都认为他们对goto的使用是非常清楚和恰当的。但是,通过从一种语言中完全移除逃生舱口,每个人都被迫重新设计他们的逻辑,使其完全干净,而不使用需要复杂跳跃的嵌套结构。谢谢。你是这么说的吗walkarouunds很简单,或者walkarouunds很简单,以至于打破嵌套循环并不需要一个特定的语句?老实说,我不知道。这个问题应该问语言设计者/实现者。
I am at i=0 , j=0 , k=0
I am at i=0 , j=0 , k=1
I am at i=0 , j=0 , k=2
I am at i=0 , j=0 , k=3
I will now break FREE...
... And Now I am Here...