【发布时间】:2020-03-30 18:16:50
【问题描述】:
它在 Java 中的样子:
public void perform() {
outer: while (someCondition) {
while(someCollection.nonEmpty() && anotherCondition) {
if (otherCondition)
break outer;
else doSomething();
}
try {
doSomethingWithException();
} catch (Exception e) {
break; // breaks outer loop
}
doSomethingAnother();
}
}
任何人都可以在 Scala 中提出替代方案吗?
我已经知道 util.control.Breaks,但是还有其他选择吗?
【问题讨论】:
-
我猜不是
nonEmpty。无论如何,它们可能是替代品,但您应该更具体地了解您的代码。您如何处理集合的每个元素,如何计算其他条件? -
这个问题的一个大问题是,所呈现的代码违反了一些核心 FP 原则,例如引用透明性等。 Scala 的方式会从:“实际上正在完成什么?”开始。但未提供该信息。
-
@jwvh,不,不,伙计,让我们跳过 FP 原则并尝试专注于主要任务:退出嵌套循环我只需要在某些条件为真时打破内部循环跨度>
-
@LuisMiguelMejíaSuárez,好的 :) 我们可以跳过收集的那一刻吗?我的主要目标是在某些条件为真时打破循环,并且在 Java/Scala 中使用 break 来实现并不难,但我正在寻找替代方法
-
@Code_VM 那么替代品是什么意思?我认为这意味着惯用的 Scala,即 jwvh 所说的 FP,这也意味着我们需要了解您想要做什么。其他替代方案包括答案中所示的布尔标志、前面提到的递归或具有早期返回语义的高阶方法,如
exists。最后,您还提到了性能,这是另一个使问题更广泛的大话题,我现在只关注替代方案,然后担心后者的性能,无论如何,如果它对您很重要,那么就进行基准测试!跨度>
标签: java scala performance loops break