F#
Statisch aufgelöste Typparameter
Suche…
Syntax
-
sist eine Instanz von^aSie zur Kompilierzeit akzeptieren möchten. Dies kann alles sein, was die Mitglieder implementiert, die Sie tatsächlich mit der Syntax aufrufen. -
^aist Generika ähnlich, die'a(oder'Aoder'Tzum Beispiel) wären, aber diese werden zur Kompilierzeit aufgelöst und erlauben alles, was zu allen angeforderten Verwendungen innerhalb der Methode passt. (keine Schnittstellen erforderlich)
Einfache Verwendung für alles, was ein Längenmitglied hat
let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11
Klasse, Schnittstelle, Datensatznutzung
// Record
type Ribbon = {Length:int}
// Class
type Line(len:int) =
member x.Length = len
type IHaveALength =
abstract Length:int
let inline getLength s = (^a: (member Length: _) s)
let ribbon = {Length=1}
let line = Line(3)
let someLengthImplementer =
{ new IHaveALength with
member __.Length = 5}
printfn "Our ribbon length is %i" (getLength ribbon)
printfn "Our Line length is %i" (getLength line)
printfn "Our Object expression length is %i" (getLength someLengthImplementer)
Statischer Member-Aufruf
Dies akzeptiert jeden Typ mit einer Methode namens GetLength , die nichts übernimmt und ein int zurückgibt:
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow