Statycznie rozwiązywane parametry typu (F#)
Statycznie rozpoznany parametr typu jest parametrem typu, który jest zastępowany rzeczywistym typem w czasie kompilacji, a nie w czasie wykonywania.Są poprzedzone symbolem, daszek (^).
ˆtype-parameter
Uwagi
W języku F# istnieją dwa odrębne rodzaje parametrów typu.Pierwszy rodzaj jest parametrem standardowym typu rodzajowego.Są one oznaczane apostrofem ('), jak w 'T i 'U.Są one równoważnymi parametrami typu rodzajowego w innych językach .NET Framework.Inny rodzaj jest statycznie rozwiązany i jest oznaczany symbolem daszka, jak w ^T i ^U.
Statycznie rozpoznane parametry typu są szczególnie przydatne w połączeniu z ograniczeniami członkowskimi, które są ograniczeniami, które umożliwiają określenie, że argument typu musi mieć danego członka lub członków, w celu umożliwienia użycia.Istnieje sposób do tworzenia tego rodzaju ograniczenia przy użyciu parametru regularnego typu rodzajowego.
W poniższej tabeli zestawiono podobieństwa i różnice między dwoma rodzajami parametrów.
Funkcja |
Ogólny |
Statycznie rozwiązany |
---|---|---|
Składnia |
'T, 'U |
^T, ^U |
Czas rozdzielczości |
Czas wykonywania |
Czas kompilacji |
Ograniczenia elementu członkowskiego |
Nie może być używany z ograniczeniami elementu członkowskiego. |
Może być używany z ograniczeniami elementu członkowskiego. |
Generowanie kodu |
Typ (lub metoda) ze standardowymi parametrami ogólnego typu powoduje generowanie jednego ogólnego typu lub metody. |
Wiele wystąpień typów i metod jest generowanych, po jednym dla każdego wymaganego typu. |
Za pomocą typów |
Może być stosowany na typach. |
Nie może być stosowany na typach. |
Za pomocą wbudowanej funkcji |
Nie.Funkcje śródwierszowe nie mogą być parametryzowane ze standardowym parametrem typu ogólnego. |
Tak.Statycznie rozwiązane parametry typu nie mogę być użyte na funkcji ani na metodach, które nie są wbudowane. |
Wiele funkcji biblioteki podstawowej F#, zwłaszcza operatory, posiada parametry typu statycznie rozpoznanych.Te funkcje i operatory są wbudowane i powodują skuteczne generowanie kodu do obliczeń numerycznych.
Metody i funkcje śródwierszowe, które używają operatorów lub innych funkcji, które posiadają parametry typu statycznie rozpoznanych, mogą również samodzielnie użyć parametrów typu statycznie rozpoznanych.Często wnioskowanie o typie daje takie wbudowane funkcje, aby mieć typy parametrów statycznie rozdzielonych.Poniższy przykład przedstawia definicję operatora, która została wywnioskowana, o posiadaniu statystycznie rozpoznany typ 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 (*) z których oba powodują, że wniosek typu wywnioskowuje ograniczenia członkowskie na statycznie rozwiązanych parametrach.Rozwiązany typ, jak pokazano na interpreterze F#, jest następujący.
^a -> ^c -> ^d
when (^a or ^b) : (static member (+) : ^a * ^b -> ^d) and
(^a or ^c) : (static member (+) : ^a * ^c -> ^b)
Dane wyjściowe są następujące:
2
1.500000