我有以下Scala代码:
breakable {
someFile.foreach { anotherFile =>
anotherFile.foreach { file =>
try {
val booleanVal = getBoolean(file)
if (booleanVal) break //break out of the try/catch + both loops
} catch {
case e: Throwable => //do something
}
}
}
}
它不起作用的if (booleanVal) break
,因为似乎Scala使其作为例外工作。如何突破这个嵌套循环?
答案 0 :(得分:1)
将if (booleanVal) break
移出try块:
val booleanVal = try {
getBoolean(file)
} catch {
case e: Throwable => //do something
}
if (booleanVal) break // break out of the try/catch + both loops
答案 1 :(得分:0)
我建议你不要使用break,因为第一次这是丑陋:)而第二次,这是不可读的。 也许你想要这样的东西:
for {
anotherFile <- someFile
file <- anotherFile
b <- Try(getBoolean(file))
if(b)
} /// do something
如果您需要在try块中做更多工作,可以写:
for {
anotherFile <- someFile
file <- anotherFile
} Try{ if(!getBoolean(file)) /* */ } match {
case onSuccess(v) =>
case onFailure(e: Throwable) =>
}