Naamruimten
Op het hoogste niveau bestaat een Q# programma uit een set naamruimten. Naast opmerkingen zijn naamruimten de enige elementen op het hoogste niveau in een Q# programma en moeten alle andere elementen zich in een naamruimte bevinden. Elk bestand kan nul of meer naamruimten bevatten en elke naamruimte kan meerdere bestanden omvatten. Q# biedt geen ondersteuning voor geneste naamruimten.
Notitie
Als u geen naamruimte expliciet declareert, gebruikt de Q# compiler de bestandsnaam als de naamruimtenaam.
Een naamruimteblok bestaat uit het trefwoord namespace
, gevolgd door de naamruimtenaam en de inhoud van het blok in accolades { }
.
Namen van naamruimten bestaan uit een reeks van een of meer juridische symbolen , gescheiden door een punt (.
).
Hoewel namen van naamruimten punten kunnen bevatten voor een betere leesbaarheid, Q# bieden geen ondersteuning voor relatieve verwijzingen naar naamruimten. Twee naamruimten Foo
en Foo.Bar
zijn bijvoorbeeld niet gerelateerd en er is geen idee van een hiƫrarchie. Met name voor een functie die is gedefinieerd, is het niet mogelijk om die functie Baz
te openen Foo
en vervolgens te openen via Bar.Baz
.Foo.Bar
Naamruimteblokken kunnen importrichtlijnen, bewerkingen, functies en typedeclaraties bevatten. Deze elementen kunnen in elke volgorde voorkomen en recursief zijn, wat betekent dat ze in elke volgorde kunnen worden gedeclareerd en gebruikt en zichzelf kunnen aanroepen. Het is niet nodig om de declaratie van een type of aanroepbaar te laten voorafgaan aan het gebruik.
Importrichtlijnen
Standaard is alles wat binnen dezelfde naamruimte is gedeclareerd, toegankelijk zonder verdere kwalificatie. Declaraties in een andere naamruimte kunnen echter alleen worden gebruikt door hun naam te kwalificeren met de naam van de naamruimte waartoe ze behoren of door die naamruimte te openen voordat deze wordt gebruikt, zoals wordt weergegeven in het volgende voorbeeld.
namespace Microsoft.Quantum.Samples {
import Microsoft.Quantum.Arithmetic.*;
import Microsoft.Quantum.Arrays.* as Array;
// ...
}
Notitie
Voor naamruimten in de standaardbibliotheek Q# kan de hoofdmap van de naamruimte worden vereenvoudigd tot Std
. Het vorige voorbeeld kan bijvoorbeeld worden herschreven als:
import Std.Arithmetic.*;
import Std.Arrays.* as Array;
In het voorbeeld wordt een import
instructie gebruikt om alle typen en aanroepbare items te importeren die zijn gedeclareerd in de Microsoft.Quantum.Arithmetic
naamruimte. U kunt ze vervolgens verwijzen naar hun niet-gekwalificeerde naam, tenzij die naam conflicteert met een declaratie in het naamruimteblok of een andere geopende naamruimte.
Om te voorkomen dat u de volledige naam typt terwijl u nog steeds onderscheid maakt tussen bepaalde elementen, kunt u een alternatieve naam of alias definiƫren voor een bepaalde naamruimte. In dit geval kunt u alle typen en aanroepbare bestanden kwalificeren die in die naamruimte zijn gedeclareerd door de gedefinieerde korte naam.
In het vorige voorbeeld wordt een alias gebruikt voor de Microsoft.Quantum.Arrays
naamruimte. Vervolgens kunt u de functie IndexRange
gebruiken, gedeclareerd in Microsoft.Quantum.Arrays
, bijvoorbeeld via Array.IndexRange
dat naamruimteblok.
Of u nu een naamruimte opent of een alias definieert, import
instructies zijn alleen geldig in het naamruimtedeel in dat bestand.