Scala tenta di evitare valori non definiti/nulli. Tuttavia, è possibile risolvere il problema dando valori di ritorno per i casi se il try
non riesce e l'inizializzazione a
con tutta try
espressione:
private val a: SomeClass =
try {
someThing // this statement may throw an exception
} catch {
case ex: Exception => {
ex.printStackTrace()
someDefault
}
}
Aggiornamento: In Scala, sarebbe probabilmente più idiomatica da utilizzare Try
da scala.util
:
val x : Int =
Try({
someThing
}).recoverWith({
// Just log the exception and keep it as a failure.
case (ex: Throwable) => ex.printStackTrace; Failure(ex);
}).getOrElse(1);
Try
consente di comporre i calcoli che possono danneggiarsi con un'eccezione in vari modi. Ad esempio, se si hanno due calcoli di tipo Try
è possibile chiamare
thing1.orElse(thing2).getOrElse(someDefault)
Questo viene eseguito thing1
e restituisce il suo risultato, se è successo. Se fallisce, continua con thing2
. Se fallisce anche, restituisce someDefault
. È inoltre possibile utilizzare recover
o recoverWith
per ripristinare da alcune eccezioni l'uso di funzioni parziali (e potenzialmente riutilizzare quelle funzioni parziali).
fonte
2013-07-07 16:32:21
Quale dovrebbe essere il valore di 'a' se il' try' fallisce? –
@TheTerribleSwiftTomato Sarò null o qualcosa di indefinito. Voglio solo inizializzarli nel try catch, perché l'assegnazione può generare un'eccezione – Pooya
@TheTerribleSwiftTomato Come aprire un flusso di file – Pooya