在this article非致死性和異常之間的區別,它說:在斯卡拉
如果你想趕上「一切」,通常會發生,然後使用 非致命性:
import scala.util.control.NonFatal
try {
operation()
} catch {
case NonFatal(e) => errorHandler(e)
}
但我通常使用Exception
:
try {
operation()
} catch {
case e: Exception => errorHandler(e)
}
我想知道Scala中的NonFatal
和Exception
有何區別? Scala中的Exception
包含致命異常嗎?
java中的AFAIK,Exception
用於非致命錯誤,Error
用於致命錯誤。是否與java的scala在Exception
方面有所不同?
哪種方式是正確的捕捉非致命異常?
我還不是很清楚,所以'NonFatal'和'Exception'大致相同? – null
沒有。當你在'e:Exception'上匹配時,你正在檢查異常的實際類型,很像Java中的catch(Exception e)'。如果異常是'Exception'的一個子類,那麼異常將被捕獲。另一方面,'NonFatal'是一個提取器對象,它對匹配值執行額外的邏輯。在這種情況下,只有當NonFatal.apply(e)返回true時,NonFatal(e)纔會匹配(並捕獲異常)。當它返回'true'時,你可以在上面的代碼片段中看到。 –
你應該閱讀一些關於提取器的教程,比如[this](http://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html),如果你不知道他們是什麼。 –