Kolejne pytanie związane z funkcją F # o nazwie "Type extensions".Rozszerz typy wyliczeń w F #
Wydaje się niemożliwe, aby rozszerzyć wyliczenia w F #. Używam C# Extensions Methods dużo rozszerzenia teksty stałe: dodać logiki sprawdzania zakres, metody, która zwraca ciąg znaków reprezentujący itp
Niestety wydaje się możliwe przedłużenia tylko dyskryminowanych Unii, ale niemożliwe przedłużyć prostych wyliczeń:
1. Wewnętrzna rozszerzenie
// CustomEnum.fs
module CustomEnumModule
type CustomEnum =
| Value1 = 1
| Value2 = 2
// Trying to split definition of the enum
type CustomEnum with
| Value3 = 3
błędu: „błąd FS0010: Nieoczekiwany symbol '|' w definicji Member”
2. Opcjonalne rozszerzenie
// CustomEnumEx.fs
open CustomEnumModule
type CustomEnum with
member public x.PrintValue() =
printfn "%A" x
błędu: "Błąd FS0896: Wyliczenia nie może mieć członków"
Wydaje się dziwne dla mnie, ponieważ (1) możemy traktuj proste wyliczenia jako specjalny przypadek w pełni funkcjonującej dyskryminowanej unii i możemy może rozszerzyć dyskryminowane związki i (2) rozszerzające .NET wyliczenia to dobry sposób na dodanie niektórych funkcji (w tym ding FP-features) do istniejącej infrastruktury.
Czy to zachowanie jest zamierzone, czy jest to prosty błąd w implementacji?
P.S. Niestety F# Spec milczy w tym względzie, a przynajmniej nie mogę znaleźć żadnych dowodów na to czy tamto zachowanie.
była podobna pytanie o Hubfs (vel FPish) A, podczas gdy tylna [Wydłużanie na Enum nie jest dozwolone?] (http://cs.hubfs.net/topic/None/59784) co sugeruje, że nie jest to możliwe i jest zgodne z projektem –
Dzięki za link. Zgadzam się, że to ** może być zgodne z projektem **. Nie rozumiem, jakie są powody tej decyzji. –