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