Die folgenden REPL Snippets setzen voraus:
%Vor%Warum werden diese beiden Anweisungen nicht kompiliert? Ich bekomme "Konstruktor kann nicht zum erwarteten Typ instanziiert werden":
%Vor% Ich kann den Erfolgswert aus einem Try
mit get
oder toOption
erhalten. Gibt es eine entsprechende Möglichkeit, den fehlgeschlagenen Throwable
-Wert oder Option[Throwable]
zu erhalten?
EDIT: Casting von Fehler / Erfolg zu versuchen funktioniert
%Vor% Das erste Snippet wird nicht kompiliert, weil Success
kein Untertyp von Failure
ist. Der Compiler denkt, dass Sie dumm sind, da der Fall Success(i)
niemals übereinstimmt.
Um ein einfacheres Beispiel zu nehmen, kompiliert das auch nicht.
%Vor%Aus dem gleichen Grund auch nicht.
%Vor% Was Sie geschrieben haben, funktioniert fast, aber der Wert, den Sie vergleichen, muss einen allgemeineren Typ von Try[_]
haben (was es sowieso hätte, wenn die Musterübereinstimmung tatsächlich in einem nützlichen Kontext verwendet würde) .
Bedenken Sie Folgendes:
%Vor% Dies funktioniert, weil Success
und Failure
Unterklassen der abstrakten Klasse Try
sind. Der folgende Code kann jedoch nicht kompiliert werden, da Sie nicht mehr mit einem generischen Try
und stattdessen mit einem Failure
übereinstimmen, was nie eine Instanz von Success
sein kann.
Das ist, als ob man versucht, eine Integer
mit einer String
zu vergleichen, das macht keinen Sinn.
Wenn Sie die Throwable
über Mustervergleich erhalten möchten, sehen Sie sich das erste Code-Snippet an.
Eine weitere Möglichkeit, Throwable
zu extrahieren, wäre die Verwendung der failed
-Methode für Ihre Try
, die die Throwable
von einem Fehler innerhalb von Success
umschließt.
Das Aufrufen von Success
löst jedoch eine weitere Ausnahme aus.