Névterek

A legfelső szinten a Q# program névterek készletéből áll. A megjegyzéseken kívül a névterek az egyetlen legfelső szintű elemek a Q# programban, és minden más elemnek egy névtérben kell lennie. Minden fájl nulla vagy több névteret tartalmazhat, és minden névtér több fájlra is kiterjedhet. Q# nem támogatja a beágyazott névtereket.

A névtérblokk a kulcsszóból namespace, majd a névtér nevéből és a blokk kapcsos zárójelek { }közötti tartalmából áll. A névtérnevek egy vagy több, ponttal (.) elválasztott jogi szimbólumból állnak. Bár a névtérnevek tartalmazhatnak pontokat a jobb olvashatóság érdekében, Q# nem támogatja a névterekre mutató relatív hivatkozásokat. Például két névtér Foo és Foo.Bar nem kapcsolódik egymáshoz, és nincs hierarchia fogalma. Különösen a ()-ban Foo.Bardefiniált függvények Baz esetében nem lehet megnyitniFoo, majd elérni a függvényt a használatávalBar.Baz.

A névtérblokkok tartalmazhatnak nyitott irányelveket, valamint műveleti, függvény- és típusdeklarációkat. Ezek bármilyen sorrendben előfordulhatnak, és alapértelmezés szerint rekurzívak, ami azt jelenti, hogy bármilyen sorrendben deklarálhatók és használhatók, és meghívhatják magukat; nincs szükség egy típus deklarációjára, vagy nem hívható meg a használat előtt.

Nyílt irányelvek

Alapértelmezés szerint az ugyanazon névtéren belül deklarált minden további minősítés nélkül elérhető. Egy másik névtérben lévő deklarációk azonban csak úgy használhatók, ha a nevüket a hozzájuk tartozó névtér nevével minősítik, vagy a névtér használat előtt való megnyitásával, ahogy az az alábbi példában is látható.

namespace Microsoft.Quantum.Samples {
    
    open Microsoft.Quantum.Arithmetic; 
    open Microsoft.Quantum.Arrays as Array; 

    // ...
}

A példa egy irányelv használatával open importálja a Microsoft.Quantum.Artithmetic névtérben deklarált összes típust és meghívhatót. Ezután a név nem minősített névvel hivatkozható rájuk, kivéve, ha ez a név ütközik a névtérblokkban vagy egy másik megnyitott névtérben lévő deklarációval.

Ha el szeretné kerülni a teljes név beírását, miközben továbbra is meg szeretné különböztetni, hogy honnan származnak bizonyos elemek, megadhat egy alternatív nevet vagy aliast, amely általában rövidebb egy adott névtérhez. Ebben az esetben az adott névtérben deklarált összes típus és hívható típus a megadott rövid névvel minősíthető. Az előző példában ez a névtér esete Microsoft.Quantum.Arrays . A(z) fájlban Microsoft.Quantum.Arraysdeklarált függvények IndexRange ezután az adott névtérblokkon belül Array.IndexRange használhatók.

Akár névteret nyit meg, akár aliast definiál, open a direktívák csak az adott fájlban lévő névtérdarabra érvényesek.