Mit der Veröffentlichung von Ceylon 1.0 diskutieren einige Leute die Nützlichkeit von Unionstypen. Ich habe mich gefragt, wie kurz Sie den folgenden Code schreiben könnten:
%Vor%... in Scala? Meine Idee war so:
%Vor%Aber der Musterextraktor wird nicht kompiliert. Irgendwelche Ideen?
Ich weiß dass eine ähnliche Frage existiert mit einigen funktionierenden Antworten , aber ich frage mich speziell, ob man einen Typ-Alias für Either
und Extraktoren verwenden kann oder nicht. Selbst wenn eine neue Typklasse als Either
definiert wird, sollte die Lösung eine erschöpfende Musterübereinstimmung zulassen.
Für den Datensatz hat Dotty Union-Typen, also wäre das Beispiel
%Vor%( Scastie-Link )
Mein Versuch. Ohne generische Extraktoren. Ich werde versuchen darüber nachzudenken, wie ich es später bekomme.
%Vor%Ich habe auch eine mehr oder weniger funktionierende Implementierung von Miles Sabins C-H-Idee (oben verlinkt). Ich bin mir nicht sicher, ob dies Ihre Frage direkt anspricht, aber vielleicht ist dies ein nützlicher Denkanstoß.
Der Quellcode ist in dieses Projekt auf GitHub .
Hier ein kurzes Anwendungsbeispiel:
%Vor%Außerdem wird eine Klasse zum Boxen dieser Typen bereitgestellt, da dies oft nützlich ist:
%Vor%Noch eine interessante Sache ist, dass die API zulässt, dass Union-Typen jeweils zu einem Zeitpunkt einen Member-Typ aufbauen:
%Vor%