Szukaj…


Składnia

  • s jest instancją ^a którą chcesz zaakceptować w czasie kompilacji, która może być wszystkim, co implementuje członków, do których faktycznie dzwonisz przy użyciu składni.
  • ^a jest podobny do ogólnych, które byłyby 'a (na przykład 'A lub 'T )), ale są one rozwiązane w czasie kompilacji i pozwalają na wszystko, co pasuje do wszystkich żądanych zastosowań w metodzie. (nie wymaga interfejsów)

Proste użycie do wszystkiego, co ma członka Length

let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11

Klasa, interfejs, wykorzystanie rekordów

// 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)

Statyczne wywołanie członka

to zaakceptuje każdy typ za pomocą metody o nazwie GetLength która nic nie bierze i zwraca wartość int:

((^a : (static member GetLength : int) ()))



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow