Deklarace typů
Q# podporuje uživatelsky definované typy. Uživatelem definované typy se podobají typům záznamů v jazyce F#; jsou neměnné, ale podporují konstruktor copy-and-update .
Uživateli definované typy
Uživatelem definované typy mohou obsahovat pojmenované i anonymní položky.
Následující deklarace v rámci oboru názvů například definuje typ Complex
, který má dvě pojmenované položky Real
a Imaginary
, obě typu Double
:
newtype Complex = (Real: Double, Imaginary : Double);
Podporuje se libovolná kombinace pojmenovaných a nepojmenovaných položek a mohou být pojmenovány také vnitřní položky.
Například typ Nested
, definovaný jako
newtype Nested = (Double, (ItemName : Int, String));
obsahuje dvě anonymní položky typu Double
a String
a pojmenovanou položku ItemName
typu Int
.
K obsaženým položkám můžete přistupovat prostřednictvím jejich názvu nebo pomocí dekonstrukce (další informace najdete v článku o přístupu k položkám). Můžete také získat přístup k řazené kolekci všech položek, kde obrazec odpovídá té definované v deklaraci prostřednictvím operátoru rozbalení.
Uživatelem definované 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 později rozšířit tak, aby obsahoval další položky, aniž by se tím porušil kód knihovny. Z tohoto důvodu se obecně nedoporučuje přistupovat k položkám prostřednictvím dekonstrukce.
Za druhé, umožňuje vyjádřit záměr a očekávání pro konkrétní datový typ, Q# protože neexistuje žádný automatický převod mezi hodnotami dvou uživatelsky definovaných typů, a to ani v případě, že jejich typy položek jsou identické.
Například aritmetická knihovna obsahuje kvantové aritmetické operace pro celá kvantová čísla big-endian i little-endian.
Proto definuje dva typy, BigEndian
a LittleEndian
, z nichž oba obsahují jednu anonymní položku typu Qubit[]
:
newtype BigEndian = Qubit[];
newtype LittleEndian = Qubit[];
Tyto typy umožňují operacím určit, jestli jsou napsané pro reprezentace typu big-endian nebo little-endian, a využívají systém typů k zajištění toho, že v době kompilace nejsou povolené neodpovídající operandy.
Uživatelem definované konstruktory
Konstruktory pro uživatelem definované typy jsou automaticky generovány kompilátorem. V současné době není možné definovat vlastní konstruktor, i když to může být v budoucnu doplněk jazyka.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat Problémy GitHubu jako mechanismus zpětné vazby pro obsah a nahradíme ho novým systémem zpětné vazby. Další informace najdete tady:Odeslat a zobrazit názory pro