Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 };