Dela via


Namnrymder

På den översta nivån består ett Q# program av en uppsättning namnområden. Förutom kommentarer är namnområden de enda elementen på den översta nivån i ett Q# program, och alla andra element måste finnas i ett namnområde. Varje fil kan innehålla noll eller fler namnområden och varje namnområde kan omfatta flera filer. Q# stöder inte kapslade namnområden.

Kommentar

Om du inte uttryckligen deklarerar ett namnområde Q# använder kompilatorn filnamnet som namnområdesnamn.

Ett namnområdesblock består av nyckelordet namespace, följt av namnområdesnamnet och innehållet i blocket inuti klammerparenteser { }. Namnområdesnamn består av en sekvens med en eller flera juridiska symboler avgränsade med en punkt (.). Namnområdesnamn kan innehålla punkter för bättre läsbarhet, Q# men stöder inte relativa referenser till namnområden. Till exempel två namnområden Foo och Foo.Bar är orelaterade, och det finns ingen uppfattning om en hierarki. I synnerhet för en funktion Baz som definierats i Foo.Bargår det inte att öppna Foo och sedan komma åt funktionen via Bar.Baz.

Namnområdesblock kan innehålla importdirektiv, åtgärder, funktioner och typdeklarationer . Dessa element kan förekomma i valfri ordning och är rekursiva som standard, vilket innebär att de kan deklareras och användas i valfri ordning och kan anropa sig själva. Det finns inget behov av att deklarationen av en typ eller anropsbar för att föregå dess användning.

Importdirektiv

Som standard kan allt som deklareras inom samma namnområde nås utan ytterligare kvalificering. Deklarationer i ett annat namnområde kan dock endast användas genom att kvalificera deras namn med namnet på det namnområde som de tillhör eller genom att öppna namnområdet innan det används, som du ser i följande exempel.

namespace Microsoft.Quantum.Samples {
    
    import Microsoft.Quantum.Arithmetic.*; 
    import Microsoft.Quantum.Arrays.* as Array; 

    // ...
}

Kommentar

För namnområden i standardbiblioteket Q# kan roten för namnområdet förenklas till Std. Det tidigare exemplet kan till exempel skrivas om som:

import Std.Arithmetic.*; 
import Std.Arrays.* as Array; 

I exemplet används ett import direktiv för att importera alla typer och anropsbara objekt som deklarerats i Microsoft.Quantum.Arithmetic namnområdet. Du kan sedan referera till dem med deras okvalificerade namn såvida inte namnet står i konflikt med en deklaration i namnområdesblocket eller något annat öppnat namnområde.

Om du vill undvika att skriva ut det fullständiga namnet samtidigt som du särskiljer var vissa element kommer ifrån kan du definiera ett alternativt namn eller alias för ett visst namnområde. I det här fallet kan du kvalificera alla typer och anropsbara objekt som deklarerats i namnområdet med det definierade korta namnet i stället. I föregående exempel används ett alias för Microsoft.Quantum.Arrays namnområdet. Du kan sedan använda funktionen IndexRange, som deklareras i Microsoft.Quantum.Arrays, till exempel via Array.IndexRange i det namnområdesblocket.

Oavsett om du öppnar ett namnområde eller definierar ett alias är import direktiv giltiga i hela namnområdesdelen i filen.