2015-12-02 44 views
0

我有以下Scala代碼:斯卡拉 - 在try-catch塊打破循環的出來

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不起作用,因爲它看起來像斯卡拉使其成爲一個異常工作。我如何擺脫這個嵌套循環?

+0

在調用返回的任何問題? –

+5

幾乎可以肯定有更好的方法來做到這一點。更多的上下文(如類型)可能有助於某人找到這種方式。 –

+0

也許你也應該看看這個http://stackoverflow.com/questions/6083248/is-it-a-bad-practice-to-catch-throwable –

回答

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 
0

我建議你不使用破發,第一個,這是醜陋:)第二,這是不可讀。 也許你想是這樣的:

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