如何打破 xtend 中的 foreach 循环?

How to break foreach loop in xtend?

我有以下代码:尽管我不想要它,但它正在迭代 arrayList 直到结束。我不知道如何打破它,因为 xtend 没有 break 语句。如果我不能将其转换为 while 循环,那么 xtend 中是否有任何替代方法类似于 java?

中的 break 语句
arrayList.forEach [ listElement | if (statusFlag){
     if(monitor.canceled){
          statusFlag = Status.CANCEL_STATUS
          return
     }
     else{
          //do some stuff with listElement
     }      
}]

你说得对,Xtend 不支持 breakcontinue

因为你似乎想 'break' 基于外部条件(所以你不能使用例如过滤)我认为抛出异常是一个不错的选择。

伪代码:

try {
    arrayList.forEach[
        if (monitor.canceled) {
            throw new InterruptedException()
        }
        else {
            // Continue processing
        }
    ]
}
catch (InterruptedException e) {
    // Handle
}

你可以尝试类似的东西

arrayList.takeWhile[!monitor.cancelled].forEach[ ... do stuff ...]
if ( monitor.cancelled ) { statusFlag = Status.CANCEL_STATUS }

takeWhile 延迟执行,因此它应该按预期工作并在正确的时刻中断(内存可见性允许,我希望 monitor.cancelled 是易变的)。

不确定状态标志如何出现在这里,您可能还需要在一个或两个闭包中添加检查。

你说得对,Xtend 不支持 break and continue。 将中断特定功能移动到 java 并在 xtend 中使用它。