F#
Statiskt lösta typparametrar
Sök…
Syntax
-
s
är ett exempel på^a
du vill acceptera vid kompileringstid, vilket kan vara allt som implementerar de medlemmar du faktiskt ringer med syntaxen. -
^a
liknar generiska som skulle vara'a
(eller'A
eller'T
till exempel) men dessa är kompileringstiden upplöst och möjliggör allt som passar alla önskade användningar inom metoden. (inga gränssnitt krävs)
Enkel användning för allt som har en längdmedlem
let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11
Klass, gränssnitt, inspelningsanvändning
// 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)
Statisk medlemssamtal
detta accepterar alla typer med en metod som heter GetLength
som inte tar något och returnerar en int:
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow