Freigeben über


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

Siehe auch

Referenz

Generika (F#)

Typrückschluss (F#)

Einschränkungen (F#)

Inlinefunktionen (F#)

Weitere Ressourcen

Automatische Verallgemeinerung (F#)