2015-12-02 2 views
0

У меня есть следующий Scala-код: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

Любой вопрос в вызове возвращения? –

+5

Существует почти наверняка лучший способ сделать это. Некоторые другие контексты (например, типы) могут помочь кому-то найти этот путь. –

+0

и, возможно, вам стоит также взглянуть на это http://stackoverflow.com/questions/6083248/is-it-a-bad-practice-to-catch-throwable –

ответ

1

Move if (booleanVal) break из примерочных блока:

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 

Если вам нужно сделать больше работы в блоке попробуете, вы можете написать:

for { 
    anotherFile <- someFile 
    file <- anotherFile 
} Try{ if(!getBoolean(file)) /* */ } match { 
    case onSuccess(v) => 
    case onFailure(e: Throwable) => 
} 
Смежные вопросы