Fehlerbehandlung mit Entweder - Wo ist der Stacktrace?

9

Ich habe von einigen Leuten gehört, dass wir in Scala (wie andere funktionale Sprachen) den Kontrollfluss nicht unterbrechen ... Stattdessen geben wir den Fehler per Konvention in Either Left zurück.

Aber wie bekommen wir das Stracktrace von dieser Ausnahme? Für jetzt gebe ich in der Left eine einfache Error case-Klasse mit einem Code, einer Nachricht und einer Cause ( Error too) zurück. Aber wenn ich einen Fehler habe, kann ich den StackTrace nicht bekommen. Wenn meine Anwendung komplex wird, kann es schwierig sein, den Codeblock zu finden, der Error zurückgab ... Die Ursache ist wesentlich.

Was machen wir in der Praxis?

Sollte ich anstelle eines benutzerdefinierten Error zurückkehren, wird der Java-Typ Exception oder Throwable in meinem Left ? Was ist die beste Vorgehensweise für die Scala-Exception-Behandlung, ohne wichtige Informationen wie StackTrace und Ursache zu verlieren?

    
Sebastien Lorber 16.09.2012, 19:22
quelle

1 Antwort

12

Ich würde vorschlagen, Either[java.lang.Throwable, A] (wo Throwable gibt Ihnen weiterhin Zugriff auf den Stack-Trace und (im Allgemeinen) machen Sie Ihre benutzerdefinierten Fehlertypen java.lang.Exception erweitern.

Dies ist die Vorgehensweise, die beispielsweise in Dispatch 0.9 verwendet wird, wobei Either[Throwable, A] zur Darstellung von möglichen Berechnungen verwendet wird fehlschlagen, und die benutzerdefinierten Fehlertypen sehen folgendermaßen aus:

%Vor%

Scalaz 7 s Validation.fromTryCatch(a: => T) gibt auch Validation[Throwable, T] zurück, wobei Validation ungefähr entspricht Either .

    
Travis Brown 16.09.2012, 19:57
quelle