2012-02-28 20 views
7

¿Hay alguna manera de acceder a val creado en un bloque try/catch dentro del bloque finally? o es el bloque finalmente fuera del alcance.Finalmente está "fuera del alcance" en un bloque try/catch

def myTryCatch: Either[Exception, String] = { 
    try { 
    val w = runOrFailWithException("Please work...") 
    Right(w) 
    } catch { 
    case ex: Exception => { 
     Left(ex) 
    } 
    } 
    finally { 
    // How do I get access to Left or Right in my finally block. 
    // This does not work 
    _ match { 
     case Right(_) => 
     case Left(_) => 
    } 
    } 
} 
+1

No, finalmente sólo se puede ver cosas declarado fuera del alcance try/catch, no dentro de ella. –

Respuesta

12

¿Por qué necesita hacer esto en el bloque finally? Desde un try/catch es una expresión, que puede coincidir en su valor:

try { 
    val w = runOrFailWithException("Please work...") 
    Right(w) 
} catch { 
    case ex: Exception => Left(ex) 
} match { 
    case Right(_) => 
    case Left(_) => 
} 
+0

Gracias, esto está funcionando muy bien. Por supuesto, no necesito 'finalmente' aquí. - Java todavía está en algún lugar en la parte posterior de mi cabeza. –

+1

En realidad tu evento no necesita una coincidencia;) haz lo que quieras con valores dentro de las cláusulas try y catch y luego "devuelve") – tuxSlayer

+0

Si Java todavía está en la parte posterior de tu cabeza debes saber que las reglas de alcance para try ..catch..finally son lo mismo en Java. –

Cuestiones relacionadas