Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Q# támogatja a felhasználó által definiált struct
típusokat.
struct
típusok hasonlóak az F# rekordtípusaihoz; nem módosíthatók, de támogatják másolási és frissítési szerkezetet.
Szerkezettípusok
struct
típusok csak névvel ellátott elemeket tartalmazhatnak, és nem támogatják a névtelen elemeket. Az elnevezett elemek bármilyen kombinációja támogatott, bár az elemek nem ágyazhatók be.
Az alábbi deklaráció például egy strukturált Complex
határoz meg, amely két elnevezett elemet Real
és Imaginary
tartalmaz, mindkettő Double
:
struct Complex {
Real : Double,
Imaginary : Double,
}
A tartalmazott elemeket a nevük vagy dekonstruálási keresztül érheti el (további információ: elemhozzáférési). Az összes olyan elem rekordját is elérheti, ahol az alakzat megegyezik a deklarációban definiáltval a .
struct
típusok két okból hasznosak. Először is, ha a definiált típusokat használó kódtárak és programok a nevükön keresztül férnek hozzá az elemekhez a dekonstruálás helyett, a típus később további elemeket is tartalmazhat, anélkül, hogy bármilyen kódtárkódot feltörne. Emiatt az elemek dekonstruáláson keresztüli elérése nem ajánlott.
Másodszor, Q# lehetővé teszi egy adott adattípus szándékának és elvárásainak átadását, mivel nincs automatikus átalakítás két struct
típusú érték között, még akkor sem, ha az elemtípusok azonosak.
Szerkezetkonstruktorok
A fordító automatikusan létrehoz konstruktorokat az új struct
-típusokhoz, amikor beolvassa a struct
definíciót. Az előző példában szereplő Complex
utasításhoz létrehozhat egy példányt a következővel:
let complexPair = Complex(1.4, 2.1);
A példányokat a new
kulcsszóval is definiálhatja, például
let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };
A meglévő szerkezeteket átmásolhatja a ...
szintaxissal
let copyPair = new Complex { ...complexPair };
Másoláskor megadhatja a módosítandó egyes mezőket
let updatedPair = new Complex { ...complexPair, Real = 3.5 };