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.Bar
gå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.