Statycznie rozwiązane parametrów typu (F#)
A statycznie rozpoznać typu parametru jest parametrem typu, który jest zastępowany rzeczywisty typ w czasie kompilacji, a nie w czasie wykonywania.Są one poprzedzone symbolu daszka (^).
ˆtype-parameter
Uwagi
W języku F# istnieją dwa odrębne rodzaje parametrów typu.Pierwszy rodzaj jest parametr typu rodzajowego standardowych.Te są oznaczone apostrofem ('), jak w 'T i 'U.Są one równoważne parametry typu rodzajowego w innych.NET Framework języków.Innego rodzaju statycznie rozpoznaniu i oznaczone symbolem daszka, jak w ^T i ^U.
Parametrów typu statycznie rozwiązane przydają się przede wszystkim w połączeniu z Członkowskich ograniczenia, które są ograniczenia, które umożliwiają określenie, że argument typu musi mieć określonego członka lub członków, aby służyć.Istnieje sposób tworzenia tego rodzaju ograniczenia przy użyciu parametr typu rodzajowego regularnych.
W następującej tabeli podsumowano podobieństw i różnic między dwoma rodzajami parametrów typu.
Funkcja |
Rodzajowa |
Statycznie rozwiązany |
---|---|---|
Składnia |
'T, 'U |
^T, ^U |
Czas rozwiązania |
Czas jednostkowy |
Czas kompilacji |
Ograniczenia Członkowskie |
Nie można używać z ograniczeniami Członkowskich. |
Można z ograniczeniami Członkowskich. |
Generowanie kodu |
Typ (lub metody) z parametrami standardowy typ rodzajowy skutkuje generacji jednego podstawowego typu lub metody. |
Wiele wystąpień typów i metod są generowane, jeden dla każdego typu, który jest potrzebny. |
Za pomocą typów |
Mogą być używane na typy. |
Nie można używać na typy. |
Za pomocą wbudowanej funkcji |
Nie.Funkcji śródwierszowej nie mogą być parametryczne z parametrem standardowego typu rodzajowego. |
Tak.Nie można używać parametrów typu statycznie rozwiązane funkcji lub metody, które nie są wbudowane. |
Wiele F# podstawowych funkcji biblioteki, zwłaszcza Operatorzy statycznie zostały rozwiązane parametrów typu.Te funkcje i operatory są wbudowane i spowodować generowanie kodu skuteczne dla obliczenia numeryczne.
Wbudowane metody i funkcje, które są operatorami lub użyć innych funkcji, które postanowiły statycznie parametrów typu można również użyć parametrów typu statycznie rozwiązane, same.Często wnioskowanie typu ustali takie funkcje wbudowane statycznie rozstrzygnąć parametrów typu.Poniższy przykład ilustruje definicji operatora, który jest niezamierzone ma statycznie rozpoznać typu parametru.
let inline (+@) x y = x + x * y
// Call that uses int.
printfn "%d" (1 +@ 1)
// Call that uses float.
printfn "%f" (1.0 +@ 0.5)
Rozpoznać typ (+@) jest oparta na wykorzystaniu obu (+) i (*), zarówno z powodują wnioskowanie typu mógł rozpoznać Członkowskie ograniczenia parametrów typu statycznie rozwiązane.Typ rozwiązane, jak pokazano w F# interpreter, jest następująca:
^a -> ^c -> ^d
when (^a or ^b) : (static member (+) : ^a * ^b -> ^d) and
(^a or ^c) : (static member (+) : ^a & ^c -> ^b)
Wprowadza dane wyjściowe.
2
1.500000