我有以下代码:即使我不想要它,也会迭代arrayList直到结束。我不知道如何打破它,因为xtend没有break语句。如果我不能将相同的转换为while循环,xtend中是否有类似于break语句的替代方法?
arrayList.forEach [ listElement | if (statusFlag){
if(monitor.canceled){
statusFlag = Status.CANCEL_STATUS
return
}
else{
//do some stuff with listElement
}
}]
答案 0 :(得分:3)
你可以尝试类似的东西
arrayList.takeWhile[!monitor.cancelled].forEach[ ... do stuff ...]
if ( monitor.cancelled ) { statusFlag = Status.CANCEL_STATUS }
takeWhile是懒惰地执行的,所以它应该按预期工作并在正确的时刻中断(内存可见性允许,我希望monitor.cancelled是易失性的。)
不确定状态标志如何在此处显示,您可能需要在一个或两个闭包中添加检查。
答案 1 :(得分:2)
您是对的,Xtend不支持break
和continue
。
因为您似乎希望根据外部条件“破解”(因此您无法使用例如过滤),我认为抛出异常并不是一个糟糕的选择。
伪代码:
try {
arrayList.forEach[
if (monitor.canceled) {
throw new InterruptedException()
}
else {
// Continue processing
}
]
}
catch (InterruptedException e) {
// Handle
}
答案 2 :(得分:0)
您是正确的,Xtend不支持中断并继续。 将特定于中断的功能移至Java并在xtend中使用。