F#
Parametry typu rozstrzygane statycznie
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