Sdílet prostřednictvím


Staticky vyřešen parametry typu (F#)

A staticky vyřešen parametr typu je parametr typu, který je nahrazen skutečné typu v čase kompilace namísto v době spuštění.Před symbol stříšky (^).

ˆtype-parameter

Poznámky

F# jazyka jsou dva odlišné typy parametrů typu.První typ je standardní obecný typ parametru.Apostrof ('), bude označen jako v 'T a 'U.Jsou rovnocenné parametry obecného typu v jiných.NET Framework jazyky.Jiný typ staticky vyřešen a symbol vynechávka označeny jako v ^T a ^U.

Jsou hlavně ve spojení s omezeními člena, které jsou omezení, které umožňují zadat, že argument typ musí mít konkrétního člena nebo členů s cílem použít parametry typu staticky vyřešen.Neexistuje žádný způsob, jak vytvořit tento typ omezení pomocí pravidelných obecný typ parametru.

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

Funkce

Obecné

Staticky vyřešen.

Syntaxe

'T, 'U

^T, ^U

Časové rozlišení

Čas spuštění

Doba kompilace

Omezení členských

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

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

Generování kódu

Na typ (nebo metodu) s parametry standardní obecný typ způsobí generování jediný obecný typ nebo metodu.

Více instancí typů a metody jsou generovány, pro každý typ, který je zapotřebí.

Pomocí typů

Lze použít typy.

Nelze použít u typů.

Použít vložené funkce

Ne.Vložené funkce nelze opatřena standardní obecný typ parametru.

Ano.Parametry staticky vyřešen typu nelze použít na funkce nebo metody, které nejsou vložené.

Mnoho F# základních funkcí knihovny, zejména subjekty byl vyřešen staticky parametry typu.Tyto funkce a operátory jsou vložené a způsobit generování kódu efektivní pro numerické výpočty.

Vložené metody a funkce, které operátory nebo pomocí jiných funkcí, které staticky nevyřešil parametry typu můžete také použít parametry typu staticky vyřešen, samy.Odvození typu často odvodí tyto vložené funkce staticky nevyřešil parametry typu.Následující příklad ukazuje definici operátor, který je odvodit mít parametr typu staticky vyřešen.

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)

Rozpoznat typ (+@) je založen na použití obou (+) a (*), obojí z které způsobit odvození typu odvodit omezení členských parametry typu staticky vyřešen.Typ vyřešen v F# interpret, je takto.

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

Výstup je takto.

2
1.500000

Viz také

Referenční dokumentace

Generics (F#)

Odvození typu (F#)

Omezení (F#)

Koncepty

Vložené funkce (F#)

Další zdroje

Automatické generalizace (F#)