Suche…


Syntax

  • s ist eine Instanz von ^a Sie zur Kompilierzeit akzeptieren möchten. Dies kann alles sein, was die Mitglieder implementiert, die Sie tatsächlich mit der Syntax aufrufen.
  • ^a ist Generika ähnlich, die 'a (oder 'A oder 'T zum 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