In this article, si dice che:La differenza tra non-fatale ed eccezione in Scala
Se si desidera catturare “tutto” che normalmente accadere, quindi utilizzare non fatale:
import scala.util.control.NonFatal
try {
operation()
} catch {
case NonFatal(e) => errorHandler(e)
}
Ma io di solito uso Exception
:
try {
operation()
} catch {
case e: Exception => errorHandler(e)
}
Mi piacerebbe sapere qual è la differenza tra NonFatal
e Exception
in Scala? Lo Exception
in Scala include un'eccezione irreversibile?
AFAIK in java, Exception
è per errore irreversibile e Error
è per errore irreversibile. Scala è diversa con java in termini di Exception
?
Qual è il modo corretto per rilevare l'eccezione non fatale?
Non sono ancora chiaro, quindi 'NonFatal' e' Exception' sono più o meno uguali? – null
No. Quando si abbina a 'e: Exception' si sta verificando il tipo effettivo dell'eccezione, proprio come' catch (Exception e) 'in Java. Se l'eccezione è una sottoclasse di 'Exception', verrà rilevata l'eccezione. 'NonFatal', d'altra parte, è un oggetto estrattore che esegue una logica aggiuntiva sul valore corrispondente. In questo caso 'NonFatal (e)' corrisponderà (e rileverà l'eccezione) solo quando 'NonFatal.apply (e)' restituisce 'true'. Quando ritorna 'true' puoi vedere nel codice di cui sopra. –
Dovresti leggere alcuni tutorial sugli estrattori, come [questo] (http://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html) uno, se non sai cosa sono. –