Betrachten Sie diese Schnittstelle:Warum ist `unit' anders durch die F # Typ-System behandelt, wenn sie als generische Schnittstelle Argument verwendet?
type A<'a> =
abstract X : 'a
Versuchen wir es als generisches Argument mit int
zu implementieren:
{ new A<int> with member this.X = 5 } // all is well
nun die unit
für ein Argument versuchen lassen:
// Compiler error: The member 'get_X : unit -> unit' does not have the correct type to override the corresponding abstract method.
{ new A<unit> with member this.X =() }
Jetzt, wenn wir eine nicht-generische Schnittstelle zu definieren, alles funktioniert auch gut:
type A_int =
abstract X : int
{ new A_int with member this.X = 5 } // works
type A_unit =
abstract X : unit
{ new A_unit with member this.X =() } // works as well!
Gibt es etwas, das ich dieses Problem beheben kann?
In C# ist es nicht möglich, eine generische Funktion Rückkehr 'void' hat - siehe zum Beispiel https://programmers.stackexchange.com/questions/131036/why-is-void-not-allowed-as-a- generischer Typ-in-c. Es ist möglich, dass in diesem Fall ähnliche Einschränkungen für den F # -Code gelten. –