F#
Parametri di tipo staticamente risolti
Ricerca…
Sintassi
-
s
è un'istanza di^a
si desidera accettare in fase di compilazione, che può essere qualsiasi cosa che implementa i membri effettivamente chiamati usando la sintassi. -
^a
è simile ai generici che sarebbero'a
(o'A
o'T
per esempio) ma questi sono risolti in tempo di compilazione, e permettono tutto ciò che si adatta a tutti gli usi richiesti all'interno del metodo. (nessuna interfaccia richiesta)
Utilizzo semplice per tutto ciò che ha un membro di lunghezza
let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11
Classe, interfaccia, utilizzo del record
// 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)
Chiamata membro statico
questo accetterà qualsiasi tipo con un metodo chiamato GetLength
che non accetta nulla e restituisce un int:
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow