F#
Statisch opgeloste typeparameters
Zoeken…
Syntaxis
-
s
is een exemplaar van^a
u tijdens het compileren wilt accepteren, wat alles kan zijn dat de leden implementeert die u daadwerkelijk roept met behulp van de syntaxis. -
^a
is vergelijkbaar met generieke geneesmiddelen die bijvoorbeeld'a
(of'A
of'T
) zijn, maar deze zijn tijdens de compilatie opgelost en laten alles toe dat binnen de gevraagde methoden past. (geen interfaces vereist)
Eenvoudig gebruik voor alles dat een lengte-lid heeft
let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11
Klasse, interface, recordgebruik
// 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)
Statische ledenoproep
dit accepteert elk type met een methode genaamd GetLength
die niets neemt en een int teruggeeft:
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow