F#
Parámetros de tipo resueltos estáticamente
Buscar..
Sintaxis
-
s
es una instancia de^a
que desea aceptar en tiempo de compilación, que puede ser cualquier cosa que implemente los miembros a los que realmente llama usando la sintaxis. -
^a
es similar a los genéricos que serían'a
(o'A
o'T
por ejemplo) pero estos se resuelven en tiempo de compilación y permiten cualquier cosa que se ajuste a todos los usos solicitados dentro del método. (no se requieren interfaces)
Uso simple para cualquier cosa que tenga un miembro Length.
let inline getLength s = (^a: (member Length: _) s)
//usage:
getLength "Hello World" // or "Hello World" |> getLength
// returns 11
Clase, interfaz, uso de registros
// 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)
Llamada de miembro estático
esto aceptará cualquier tipo con un método llamado GetLength
que no toma nada y devuelve un int:
((^a : (static member GetLength : int) ()))
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow