Udostępnij za pośrednictwem


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

Zobacz też

Informacje

Typy ogólne (F#)

Wnioskowanie o typie (F#)

Ograniczenia (F#)

Koncepcje

Funkcje śródwierszowe (F#)

Inne zasoby

Automatyczna generalizacja (F#)