Wie werden Fehlertypen in Scala gewerkschaftlich organisiert?

8

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:

%Vor%

... 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 .

    
Michael 21.03.2015, 11:55
quelle

3 Antworten

1

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.

    
vptheron 21.03.2015 12:04
quelle
0

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%     
maasg 21.03.2015 12:12
quelle
0

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.

    
Brian Clapper 21.03.2015 17:58
quelle

Tags und Links