Typdeklarationen
Q# unterstützt benutzerdefinierte struct
Typen.
Strukturtypen
struct
Typen können nur benannte Elemente enthalten und anonyme Elemente nicht unterstützen. Jede Kombination von benannten Elementen 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 im Allgemeinen abgeraten.
Zweitens können Sie Q# die Absicht 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
Konstruktoren für neue struct
Typen werden automatisch vom Compiler generiert, wenn eine struct
Definition gelesen wird. Für die Complex
-Anweisung im vorherigen Beispiel können Sie eine Instanz mit
let complexPair = Complex(1.4, 2.1);
Instanzen können auch vom Benutzer mit dem Schlüsselwort new
definiert werden, z. B.
let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };
Sie können auch 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 };