Megosztás a következőn keresztül:


Másolható és frissíthető kifejezések

A mutable kötések Q# szükségességének csökkentése érdekében támogatja az elemhozzáféréssel rendelkező értéktípusok másolási és frissítési kifejezéseit. A felhasználó által definiált típusok és tömbök nem módosíthatók, és ebbe a kategóriába tartoznak. A felhasználó által definiált típusok lehetővé teszik az elemek névvel való elérését, míg a tömbök lehetővé teszik az elemek elérését indexen vagy indextartományon keresztül.

A másolási és frissítési kifejezések létrehoznak egy új értéket, amelyben az összes elem az eredeti kifejezés megfelelő értékére van beállítva, kivéve bizonyos megadott elemeket, amelyek a kifejezés jobb oldalán definiált elemekre vannak beállítva. Ternáris operátorral w/ <-jönnek létre; a szintaxist w/ a "with" kifejezés gyakran használt rövid jelöléseként kell értelmezni:

    original w/ itemAccess <- modification

ahol original a felhasználó által definiált típusú kifejezés vagy tömbkifejezés. A megfelelő követelményekről itemAccess a modificationfelhasználó által definiált típusok másolása és frissítése, valamint a tömbök másolása és frissítése című témakörben olvashat.

Az elsőbbség szempontjából a másolási és frissítési operátor bal asszociatív, és a legalacsonyabb elsőbbséget élvezi, és különösen alacsonyabb elsőbbséget élvez, mint a tartomány operátora (..) vagy a ternáris feltételes operátor (? |). A választott bal asszociativitás lehetővé teszi a másolási és frissítési kifejezések egyszerű láncolását:

    let model = Default<SequentialModel>()
        w/ Structure <- ClassifierStructure()
        w/ Parameters <- parameters
        w/ Bias <- bias;

Mint minden olyan operátor esetében, amely a bal oldali kifejezéssel azonos típusú kifejezést hoz létre, elérhető a megfelelő kiértékelő és újraaláíró utasítás . A következő két utasítás például a következőket éri el: Az első utasítás deklarál egy változót arr , és egy egész tömb alapértelmezett értékéhez köti. A második utasítás ezután létrehoz egy új tömböt, amelyben az első elem (0 indexszel) 10-re van állítva, és újra hozzárendeli a következőhöz arr: .

    mutable arr = [0, size = 3]; // arr contains [0, 0, 0]
    set arr w/= 0 <- 10;      // arr contains [10, 0, 0] 

A második utasítás csak rövid kézből áll a részletesebb szintaxishoz set arr = arr w/ 0 <- 10;.

Felhasználó által definiált típusok másolása és frissítése

Ha az érték original felhasználó által definiált típus, akkor itemAccess annak az elemnek a nevét jelöli, amely eltér az eredeti értéktől. Ez nem csak egy másik kifejezés, például original és modification, mert az elemnév további minősítés nélkül való használatára csak erre a kontextusra korlátozódik, ez a két környezetfüggő kifejezés Q#egyike a .

A kifejezés típusának modification meg kell egyeznie az elnevezett elem típusával, amely eltér. Ha például complex az értéket Complex(0., 0.)tartalmazza , ahol a típus Complex itt van definiálva, akkor

complex w/ Re <- 1. 

A egy olyan típusú kifejezés, amely a Complex(1., 0.)értéket Complex értékeli ki.

Tömbök másolása és frissítése

Tömbök itemAccess esetén a megfelelő típus tetszőleges kifejezése lehet; a tömb szeletelésére érvényes típusok ebben a kontextusban érvényesek. Konkrétan a itemAccess kifejezés lehet típus Int vagy Range. Ha itemAccess a típus Intértéke, akkor a típusnak modification meg kell egyeznie a tömb elemtípusával. Ha itemAccess a típus Rangeértéke, akkor a típusnak meg kell egyeznie modification a tömb típusával.

Ha például arr tömböt [0, 1, 2, 3]tartalmaz, akkor

  • arr w/ 0 <- 10 a tömb [10, 1, 2, 3].
  • arr w/ 2 <- 10 a tömb [0, 1, 10, 3].
  • arr w/ 0..2..3 <- [10, 12] a tömb [10, 1, 12, 3].

A másolási és frissítési kifejezések lehetővé teszik az új tömbök hatékony létrehozását a meglévők alapján. A másolási és frissítési kifejezések implementációja elkerüli a teljes tömb másolását úgy, hogy csak a szükséges részeket duplikálja a kívánt viselkedés eléréséhez, és lehetőség szerint helyben módosítja. Ezért a tömb inicializálásai nem járnak további többletterheléssel a nem módosíthatóság miatt.

A Microsoft.Quantum.Arrays névtér a tömblétrehozáshoz és -kezeléshez használható eszközök széles választékát biztosítja.

A másolási és frissítési kifejezések kényelmesen hozhatnak létre új tömböket menet közben; a következő kifejezés például egy tömbre értékeli ki az összes elemet PauliI, kivéve az indexben ilévő elemet, amely a következőre PauliZvan állítva:

[PauliI, size = n] w/ i <- PauliZ