Sdílet prostřednictvím


Statisticky vyřešené parametry typu (F#)

Parametr staticky vyřešeného typu je parametr typu, který je nahrazen skutečným typem v době kompilace místo v době běhu.Předchází jim symbol stříšky (^).

ˆtype-parameter

Poznámky

V jazyce F# existují dva odlišné druhy typů parametrů.První druh je standardní parametr obecného typu.Ty jsou označeny apostrofem ('), např. 'T nebo 'U.Jsou ekvivalentní parametrům obecného typu v jiných jazycích rozhraní .NET Framework.Jiný typ je staticky řešen a je označen symbolem stříšky, např. ^T a ^U.

Staticky rozpoznávané parametry typu jsou především užitečné ve spojení s omezeními členů, což jsou omezení, která umožňují určit, že argument typu musí mít určitého člena nebo členy, aby ho bylo možné použít.Neexistuje žádný způsob, jak vytvořit tento druh omezení pomocí parametru obecného typu.

Následující tabulka shrnuje podobnosti a rozdíly mezi dvěma druhy parametrů typu.

Funkce

Obecné

Staticky vyřešené.

Syntax

'T, 'U

^T, ^U

Doba řešení

Za běhu.

V době kompilace

Členská omezení

Nelze použít s omezeními člena.

Lze použít s omezeními člena.

Generování kódu

Typ (nebo metoda) se standardními parametry obecného typu způsobí generování jednoho obecného typu nebo metody.

Je generováno více instancí typů a metod, jedna pro každý typ, který je nutný.

Použít s typy

Lze použít u typů.

Nelze použít u typů.

Použít s vloženými funkcemi

Ne.Vložená funkce nemůže být parametrizována pomocí standardního parametru obecného typu.

Ano.Staticky rozpoznávané parametry typu nelze použít na funkce ani metody, které nejsou vložené.

Mnoho základních knihovních funkcí F#, především operátory, má staticky řešené parametry typu.Tyto funkce a operátory jsou vložené a způsobují efektivní generování kódu pro numerické výpočty.

Vložené metody a funkce, které používají operátory nebo jiné funkce, které mají staticky řešené parametry typu, používají samy také staticky řešené parametry typu.Často odvození typu odvodí tyto vložené funkce pro staticky řešené parametry typu.Následující příklad ukazuje definici operátoru, který je odvozen, aby měl má parametr staticky řešeného typu.

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)

Rozpoznaný typ (+@) je založen na použití (+) i (*), z nichž oba způsobují, že odvození typu odvozuje členská omezení na staticky rozpoznávaných typových parametrů.Rozpoznaný typ, jak je uvedeno v interpretátoru F#, je následující.

^a -> ^c -> ^d
when (^a or ^b) : (static member (+) : ^a * ^b -> ^d) and
     (^a or ^c) : (static member (+) : ^a * ^c -> ^b)

Výstup je následující.

2
1.500000

Viz také

Referenční dokumentace

Obecné typy (F#)

Odvození typu (F#)

Omezení (F#)

Koncepty

Vložené funkce (F#)

Další zdroje

Automatická generalizace (F#)