Angenommen, ich habe ein paar Funktionen
%Vor%... und ich muss sie komponieren:
%Vor% f123
sollte Error1 | Error2 | Error3 \/ Int
zurückgeben, aber ich habe nicht |
in Scala und daher verwende ich die Vererbung:
... aber was, wenn ich f1
und f2
zusammenstellen muss?
Soll ich ein neues Merkmal Error12
erstellen und Error1
und Error2
erweitern? Was passiert, wenn ich fünf Funktionen f1
, f2
, ..., f4
, f5
und fünf Fehlerklassen habe?
Ich mag diesen Vererbungsansatz nicht, weil bereits vorhandene Typen Error1
, Error2
usw. ändert, nur um ihre Vereinigungen zu definieren. Also frage ich mich, wie man diese Typen in Scala organisiert .
IMHO, das ist der beste Ansatz. Was versuchst du zu machen? Definieren Sie eine Funktion, die entweder ein Ergebnis oder einen Fehler vom Typ Error123
zurückgibt, was soll es sonst noch sagen?
Wenn Sie Error123
als versiegeltes Merkmal definieren und es mit N Fallklassen erweitern, um den Fehler besser zu beschreiben, müssen Sie sicherstellen, dass der Aufrufer alle Fälle behandeln muss, da der Compiler ihn auffordern wird, einen vollständigen Mustervergleich durchzuführen. p>
Wenn es so ausführlich und umständlich ist, müssen Sie vielleicht die ADT Ihrer Fehlerfälle überdenken.
Scala hat eine monadische Try-Konstruktion, die wahrscheinlich die Funktionalität liefert, nach der Sie suchen, indem Sie Ihre eigene Error
-Klasse mit Failure
handeln.
Ihre monadische Zusammensetzung würde zu:
werden %Vor%... und dann, um sie zu komponieren:
%Vor%zB:
%Vor% Eine andere Möglichkeit, die Ihnen zur Verfügung steht, ist die Scalactic Bibliothek von Bill Venners. Es stellt Or
und Every
Konstrukte für die Behandlung von Fehlern zur Verfügung.
Tags und Links scala error-handling