Diskriminierte Gewerkschaftsmitgliedsmethoden

8

Ich möchte eine Methode definieren, die von allen Mitgliedern einer diskriminierten Gewerkschaft geteilt wird. Momentan habe ich es so implementiert, aber es scheint wirklich unelegant - sicherlich gibt es einen besseren Weg. Vorschläge?

%Vor%     
Robert Sim 25.11.2014, 20:27
quelle

2 Antworten

12

Was ist mit so etwas?

%Vor%

Dies setzt voraus, dass Sie möchten, dass jede Variante Ihres Sum-Typs (diskriminierte Vereinigung) mit dem float-Parameter etwas anderes macht.

Für den Fall von A gebe ich einfach den ursprünglichen Wert zurück, da ich sonst nicht viel machen kann (da es keine allgemein nützliche Beziehung zwischen string und float gibt, die float ergibt).

    
Rodrick Chapman 25.11.2014, 21:22
quelle
7

In Ihrem Beispiel haben Sie augmentiert die Datensätze -Typen A und B jeweils mit einem Instanzmitglied. Sie können jedoch nicht nur Datensatztypen erweitern, können Sie auch erweitern Vereinigung Typen (wie in @ Rodrick Antwort gezeigt). Wenn Sie dies tun, wird die Erweiterung der Gewerkschaft von jedem DU-Fall "geteilt", was Sie gefragt haben. Um dies deutlicher zu machen, habe ich einige Teile Ihres Beispiels umbenannt:

%Vor%

Wenn Sie den kompilierten Code im Objekt-Browser (oder einem Decompiler wie ILSpy) betrachten, sehen Sie, dass AB als Basisklasse der beiden Unterklassen AB.ACase und AB.BCase und SharedMethod kompiliert ist. gehört zur Basisklasse AB .

Siehe auch Abschnitt 8.5.1 der F # 3.0-Spezifikation : Mitglieder in Unionstypen.

    
Marc Sigrist 26.11.2014 11:05
quelle