W this article, to powiedział, że:Różnica między niezakończony zgonem i wyjątek w Scala
Jeśli chcesz złapać „wszystko”, które normalnie zdarzyć, a następnie użyć niezakończony zgonem:
import scala.util.control.NonFatal
try {
operation()
} catch {
case NonFatal(e) => errorHandler(e)
}
Ale ja zwykle korzystam Exception
:
try {
operation()
} catch {
case e: Exception => errorHandler(e)
}
Chciałbym wiedzieć, jaka jest różnica między NonFatal
i Exception
w Scala? Czy Exception
w Scali zawiera fatalny wyjątek?
AFAIK w języku Java, Exception
jest przeznaczony dla błędu nie powodującego krytycznego wypadku, a Error
oznacza błąd krytyczny. Czy scala różni się od java pod nazwą Exception
?
Która z metod jest właściwa do przechwycenia wyjątku nie powodującego śmierci?
Nie jestem jeszcze całkiem jasny, więc 'NonFatal' i' Exception' są mniej więcej takie same? – null
Nie. Kiedy pasujesz do 'e: Exception', sprawdzasz rzeczywisty typ wyjątku, podobnie jak' catch (Exception e) 'w Javie. Jeśli wyjątek jest podklasą wyjątku, wyjątek zostanie przechwycony. Z kolei 'NonFatal' jest obiektem ekstraktora, który wykonuje dodatkową logikę na dopasowanej wartości. W tym przypadku 'NonFatal (e)' będzie pasować (i wychwycić wyjątek) tylko wtedy, gdy 'NonFatal.apply (e)' zwraca 'true'. Kiedy zwraca 'true', możesz zobaczyć w kawałku kodu powyżej. –
Powinieneś przeczytać samouczek dotyczący ekstraktorów, taki jak [this] (http://danielwestheide.com/blog/2012/11/21/the-neophytes-guide-to-scala-part-1-extractors.html) jeden, jeśli nie wiesz, co to jest. –