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