Eine weitere Frage im Zusammenhang mit F # Feature namens "Type extensions".Erweitern Aufzählungsarten in F #
Es scheint unmöglich, Aufzählungen in F # zu erweitern. Ich benutze C# Extensions Methods viel für Aufzählungen erstreckt: Bereich Validierungslogik hinzufügen, Methode, die String-Darstellung zurück usw.
Leider scheint es möglich, nur diskriminiert Union zu erweitern, sondern unmöglich einfache Aufzählungen zu verlängern:
1. Intrinsic Erweiterung
// CustomEnum.fs
module CustomEnumModule
type CustomEnum =
| Value1 = 1
| Value2 = 2
// Trying to split definition of the enum
type CustomEnum with
| Value3 = 3
Fehler: „Fehler FS0010: Unerwarteter Symbol '|' in Mitglied Definition“
2. Optionale Erweiterung
// CustomEnumEx.fs
open CustomEnumModule
type CustomEnum with
member public x.PrintValue() =
printfn "%A" x
Fehler: "Fehler FS0896: Aufzählungen können nicht Mitglieder haben"
Es scheint für mich komisch, weil (1) können wir behandeln einfache Aufzählungen als Sonderfall der diskriminierten Union mit vollem Funktionsumfang und wir können diskriminierten Gewerkschaften erweitern und (2) erweitern. NET enums ist ein guter Weg, um einige Funktionen hinzuzufügen (inclu ding FP-Features) in die bestehende Infrastruktur.
Ist dieses Verhalten beabsichtigt oder ist dies ein einfacher Fehler in der Implementierung?
P.S. Leider schweigt F# Spec in dieser Hinsicht, oder zumindest kann ich dort keine Beweise für das eine oder andere Verhalten finden.
Es gibt eine ähnliche Frage auf Hubfs war (aka FPish) eine Weile zurück: [Erweiterungsmethode auf Enum nicht erlaubt?] (http://cs.hubfs.net/topic/None/59784) was darauf hindeutet, dass es nicht möglich ist und von Entwurf ist –
Danke für den Link. Und ich stimme zu, dass das ** von Entwurf sein könnte **. Ich kann nicht verstehen, was die Gründe für diese Entscheidung sind. –