Statisch aufgelöste Typparameter (F#)
Ein statisch aufgelöster Typparameter ist ein Typparameter, der zur Kompilierzeit statt zur Laufzeit durch einen tatsächlichen Typ ersetzt wird. Ihnen wird ein Caretzeichen (^) vorangestellt.
ˆtype-parameter
Hinweise
In der Programmiersprache F# gibt es zwei unterschiedliche Arten von Typparametern. Die erste Art ist der standardmäßige generische Typparameter. Diese werden durch ein Apostroph (') angegeben, wie bei 'T und 'U. Sie entsprechen generischen Typparametern in anderen .NET Framework-Sprachen. Die andere Art ist statisch aufgelöst und wird von einem Caretzeichensymbol, wie in ^T und ^U.
Statisch aufgelöste Typparameter sind hauptsächlich in Verbindung mit Membereinschränkungen nützlich, die Ihnen die Angabe ermöglichen, dass ein Typargument zur Verwendung einen bestimmten Member oder mehrere Member aufweisen muss. Es gibt keine Möglichkeit, diese Art von Einschränkung mit einem regulären generischen Typparameter zu erstellen.
In der folgenden Tabelle werden die Ähnlichkeiten und die Unterschiede zwischen den beiden Arten von Typparametern zusammengefasst.
Feature |
Generisch |
Statisch aufgelöst |
---|---|---|
Syntax |
'T, 'U |
^T, ^U |
Auflösungszeit |
Laufzeit |
Kompilierungsfehler |
Member-Einschränkungen |
Kann nicht mit Membereinschränkungen verwendet werden. |
Kann mit Membereinschränkungen verwendet werden. |
Codeerzeugung |
Ein Typ (oder eine Methode) mit standardmäßigen generischen Typparametern führt zur Erstellung eines einzelnen generischen Typs oder einer Methode. |
Mehrere Instanziierungen von Typen und Methoden werden generiert, einer für jeden erforderlichen Typ. |
Verwendung mit Typen |
Kann mit Typen verwendet werden. |
Kann nicht mit Typen verwendet werden. |
Verwendung mit Inlinefunktionen |
Nein. Eine Inlinefunktion kann nicht mit einem standardmäßigen generischen Typparameter parametrisiert werden. |
Ja. Statisch aufgelöste Typparameter können nicht auf Funktionen oder Methoden angewendet werden, die nicht inline sind. |
Viele F#-Kernbibliotheksfunktionen, besonders Operatoren, verfügen über statisch aufgelöste Typparameter. Diese Funktionen und die Operatoren sind inline, und ergeben effiziente Codeerstellung für numerische Berechnungen.
Inlinemethoden und -funktionen, die Operatoren oder andere Funktionen mit statisch aufgelösten Typparametern verwenden, können auch selbst statisch aufgelöste Typparameter verwenden. Oft leitet der Typrückschluss ab, dass solche Inlinefunktionen statisch aufgelöste Typparameter aufweisen. Im folgenden Beispiel wird eine Operatordefinition veranschaulicht, die so abgeleitet wird, dass sie einen statisch aufgelösten Typparameter hat.
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)
Der aufgelöste Typ von (+@) basiert auf der Verwendung von (+) und (*), durch die vom Typrückschluss Membereinschränkungen für die statisch aufgelösten Typparameter abgeleitet werden. Der aufgelöste Typ, wie im F#-Interpreter angezeigt, lautet wie folgt.
^a -> ^c -> ^d
when (^a or ^b) : (static member (+) : ^a * ^b -> ^d) and
(^a or ^c) : (static member (+) : ^a & ^c -> ^b)
Die Ausgabe lautet wie folgt.
2
1.500000