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