Typdeklarationen
Q# unterstützt benutzerdefinierte struct
Typen.
struct
Typen ähneln Datensatztypen in F#; sie sind unveränderlich, unterstützen aber ein -Konstrukts kopieren und aktualisieren.
Strukturtypen
struct
Typen können nur benannte Elemente enthalten und anonyme Elemente nicht unterstützen. Eine beliebige Kombination benannter Elemente wird unterstützt, obwohl Elemente nicht geschachtelt werden können.
Die folgende Deklaration definiert z. B. eine Struktur Complex
mit zwei benannten Elementen Real
und Imaginary
, die beide vom Typ Double
sind:
struct Complex {
Real : Double,
Imaginary : Double,
}
Sie können über ihren Namen oder über Destrukturierung auf die enthaltenen Elemente zugreifen (weitere Informationen finden Sie unter Elementzugriff). Sie können auch auf ein Tupel aller Elemente zugreifen, bei denen das Shape mit dem in der Deklaration definierten Element über den unwrap-Operatorübereinstimmt.
struct
Typen sind aus zwei Gründen nützlich. Solange die Bibliotheken und Programme, die die definierten Typen verwenden, nicht über die Dekonstruktion, sondern über ihren Namen auf Elemente zugreifen, kann der Typ erweitert werden, um später zusätzliche Elemente zu enthalten, ohne Bibliothekscode zu unterbrechen. Aus diesem Grund wird der Zugriff auf Elemente über die Dekonstruktion abgeraten.
Zweitens können Sie Q# die Absichten und Erwartungen für einen bestimmten Datentyp vermitteln, da keine automatische Konvertierung zwischen Werten von zwei struct
Typen vorhanden ist, auch wenn ihre Elementtypen identisch sind.
Strukturkonstruktoren
Der Compiler generiert automatisch Konstruktoren für neue struct
Typen, wenn er eine struct
Definition liest. Für die Complex
-Anweisung im vorherigen Beispiel können Sie eine Instanz mit
let complexPair = Complex(1.4, 2.1);
Sie können Instanzen auch mit dem schlüsselwort new
definieren, z. B.
let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };
Sie können eine vorhandene Struktur mit der ...
-Syntax kopieren.
let copyPair = new Complex { ...complexPair };
Beim Kopieren können Sie einzelne zu ändernde Felder angeben.
let updatedPair = new Complex { ...complexPair, Real = 3.5 };