Ho il seguente codice Scala fittizia nel file test.scala
:cattura tutte le eccezioni in Scala 2.8 RC1
class Transaction {
def begin() {}
def commit() {}
def rollback() {}
}
object Test extends Application {
def doSomething() {}
val t = new Transaction()
t.begin()
try {
doSomething()
t.commit()
} catch {
case _ => t.rollback()
}
}
Se ho compilare questo su Scala 2.8 RC1 con scalac -Xstrict-warnings test.scala
Prendo il seguente avviso:
test.scala:16: warning: catch clause swallows everything: not advised.
case _ => t.rollback()
^
one warning found
Quindi, se le espressioni catch-all non sono consigliate, come dovrei implementare tale modello invece? E a parte questo perché tali espressioni non sono comunque consigliate?
OK. Questo funziona per le transazioni. Ma cosa succede se voglio ignorare completamente un'eccezione generata da un metodo solo perché non ha importanza a questo punto. –
È possibile 'catch {case _: Exception =>}'. 'Errore' è' Throwable' ma non un 'Exception' - di solito meglio da seguire. Se intendi davvero, "Non mi interessa se cerco e non riesco a cogliere questo, voglio almeno dargli il mio colpo migliore", quindi puoi vivere con il (rigoroso) messaggio di avvertimento. Ecco perché è un avvertimento, non un errore. –
Sì, funziona. Grazie! Hai ragione, che catturare l'errore non è proprio quello che voglio :-) –