另一种方法是在循环上使用else
块:for
shared void run() {
variable Integer? x = null;
for (i in 0:3) {
for (j in 0:3) {
for (k in 0:3) {
value n = i*j*k;
if (n > 18) {
x = n;
break;
} else {
continue;
}
} else {
continue;
}
break;
} else {
continue;
}
break;
} else {
x = null;
}
print(x);
}
一般来说,放置
else {
continue;
}
break;
在 everyfor
的右括号之后。
(注意:理想情况下,被分配的变量——x
在我的例子中,something
在你的例子中——不需要是variable
,因为它只分配了一次。但是,类型检查器目前无法证明这一点。)
它是如何工作的?如果该循环在没有else
任何. 在这种情况下,我们也想要外循环;否则——也就是说,如果我们从内部循环中断——我们也想从外部循环中断。for
break
continue
break
这可以使用ceylon/ceylon#3223中提出的以下语法更简洁地编写:
for (a in b) {
for (x in y) {
if (something) {
break;
}
} then { // opposite of else: runs iff there was a break in the inner loop
break;
}
}
我不推荐这个解决方案,原因有以下三个:
- 它甚至比您的闭包解决方案更具可读性。该
for {} else {}
功能相当晦涩,如果您不熟悉它,则其含义根本不明显,这使普通读者无法理解代码。
- 它在每个周围的循环中(不仅仅是一次)使代码膨胀很多,也使它不可读。
- 如果你想在内部循环之后的外部循环中有代码,你必须复制它:
else
块和它之后的代码都需要一个副本。