Scala - 在try-catch块中打破循环

时间:2015-12-02 01:55:36

标签: scala try-catch break

我有以下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使其作为例外工作。如何突破这个嵌套循环?

2 个答案:

答案 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) =>
}