Sdílet prostřednictvím


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 můžou 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 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 mezi hodnotami dvou typů struct neexistuje automatický převod, a to i v případě, že jsou jejich typy položek stejné.

Konstruktory struktury

Kompilátor při čtení definice struct automaticky generuje konstruktory pro nové typy struct. Pro Complex strukturu v předchozím příkladu můžete vytvořit instanci pomocí

let complexPair = Complex(1.4, 2.1);

Instance můžete definovat také pomocí klíčového slova new, například

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

Existující strukturu můžete zkopírovat pomocí syntaxe ....

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 };