Deklarace typů
Q# podporuje uživatelem definované typy struct
.
struct
typy se podobají typům záznamů v jazyce F#; jsou neměnné, ale podporují konstruktor kopírování a aktualizace.
Typy struktur
struct
typy mohou obsahovat pouze pojmenované položky a nepodporují anonymní položky. Podporuje se jakákoli kombinace pojmenovaných položek, i když položky nelze vnořit.
Následující deklarace například definuje strukturu Complex
, která má dvě pojmenované položky Real
a Imaginary
, oba typy Double
:
struct Complex {
Real : Double,
Imaginary : Double,
}
K obsaženým položkám můžete přistupovat prostřednictvím jejich názvu nebo pomocí dekonstrukčního (další informace najdete v tématu přístup k položce). Můžete také přistupovat k řazené kolekci všech položek, kde obrazec odpovídá té definované v deklaraci, prostřednictvím unwrap operator.
struct
typy jsou užitečné ze dvou důvodů. Zaprvé, pokud knihovny a programy, které používají definované typy, přistupují k položkám prostřednictvím jejich názvu místo dekonstrukce, lze tento typ rozšířit tak, aby obsahoval další položky později bez přerušení kódu knihovny. Z tohoto důvodu se obecně nedoporučuje přístup k položkám prostřednictvím dekonstrukce.
Za druhé, Q# umožňuje vyjádřit záměr a očekávání pro konkrétní datový typ, protože neexistuje automatický převod mezi hodnotami dvou typů struct
, i když jsou jejich typy položek stejné.
Konstruktory struktury
Konstruktory pro nové typy struct
jsou kompilátorem automaticky generovány při čtení definice struct
. Pro Complex
strukturu v předchozím příkladu můžete vytvořit instanci pomocí
let complexPair = Complex(1.4, 2.1);
Instance lze také definovat uživatelem pomocí klíčového slova new
, například
let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };
Můžete také zkopírovat existující strukturu se syntaxí ...
.
let copyPair = new Complex { ...complexPair };
Při kopírování můžete zadat jednotlivá pole, která se mají změnit.
let updatedPair = new Complex { ...complexPair, Real = 3.5 };