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


Módosíthatatlanság

A-ben minden Q# típus értéktípus. Q# nem rendelkezik hivatkozással vagy mutatóval. Ehelyett lehetővé teszi egy új érték hozzárendelését egy korábban deklarált változóhoz egy set utasítással. Például nincs különbség a típus vagy típusú változók újrahozzárendelései IntInt[]között. Vegye figyelembe a következő utasítások sorozatát:

    mutable arr1 = new Int[3];
    let arr2 = arr1; 
    set arr1 w/= 0 <- 3; 

Az első utasítás egy új egész számtömböt [0,0,0] példányosít, és hozzárendeli a függvényhez arr1. A következő utasítás hozzárendeli ezt az értéket egy nevű arr2változóhoz. Az utolsó utasítás létrehoz egy új tömbpéldányt arr1 ugyanazokkal az értékekkel, kivéve a 0 index értékét, amely 3-ra van állítva. Az újonnan létrehozott tömb ezután hozzá lesz rendelve a változóhoz arr1. Az utolsó sor a rövidített szintaxist használja az evaluate-and-reassign utasításokhoz, és ennek megfelelően a következőként set arr1 = arr1 w/ 0 <- 1;lett megírva: .
A három utasítás futtatása után a az értéket [3,0,0] fogja tartalmazni, arr1 miközben arr2 változatlan marad, és a értéket [0,0,0]tartalmazza.

Q# egyértelműen megkülönbözteti a leírók módosíthatóságát és a típus viselkedését. A belül Q# a módosíthatóság olyan fogalom, amely nem típusra vagy értékre, hanem szimbólumra vonatkozik; a leíróra vonatkozik, amely lehetővé teszi egy érték elérését, és nem magához az értékhez. Nem jelenik meg a típusrendszerben, implicit módon vagy explicit módon.

Természetesen ez csupán a formálisan meghatározott viselkedés leírása; a motorháztető alatt a tényleges megvalósítás hivatkozásszámlálási sémát használ a memória lehető legnagyobb mértékű másolásának elkerülése érdekében. A módosítás kifejezetten a helyén történik, feltéve, hogy csak egy érvényes leíró fér hozzá egy bizonyos értékhez.