Przestrzenie nazw

Na najwyższym poziomie Q# program składa się z zestawu przestrzeni nazw. Poza komentarzami przestrzenie nazw są jedynymi elementami najwyższego Q# poziomu w programie, a wszystkie inne elementy muszą znajdować się w przestrzeni nazw. Każdy plik może zawierać zero lub więcej przestrzeni nazw, a każda przestrzeń nazw może obejmować wiele plików. Q# nie obsługuje zagnieżdżonych przestrzeni nazw.

Blok przestrzeni nazw składa się ze słowa kluczowego namespace, a następnie nazwy przestrzeni nazw i zawartości bloku wewnątrz nawiasów klamrowych { }. Nazwy przestrzeni nazw składają się z sekwencji co najmniej jednego symbolu prawnego oddzielonego kropką (.). Chociaż nazwy przestrzeni nazw mogą zawierać kropki w celu zapewnienia lepszej czytelności, Q# nie obsługuje odwołań względnych do przestrzeni nazw. Na przykład dwie przestrzenie Foo nazw i Foo.Bar są niepowiązane i nie ma pojęcia hierarchii. W szczególności dla funkcji Baz zdefiniowanej w Foo.Barpliku nie można otworzyć Foo funkcji, a następnie uzyskać do niej dostęp za pośrednictwem funkcji Bar.Baz.

Bloki przestrzeni nazw mogą zawierać otwarte dyrektywy , a także deklaracje operacji, funkcji i typów . Mogą one występować w dowolnej kolejności i są domyślnie rekursywne, co oznacza, że można je zadeklarować i używać w dowolnej kolejności i mogą wywoływać się samodzielnie; nie ma potrzeby deklaracji typu lub wywoływania, aby poprzedzać jego użycie.

Otwarte dyrektywy

Domyślnie dostęp do wszystkich zadeklarowanych w tej samej przestrzeni nazw można uzyskać bez dalszych kwalifikacji. Jednak deklaracje w innej przestrzeni nazw mogą być używane tylko przez kwalifikowanie ich nazwy z nazwą przestrzeni nazw, do której należą lub przez otwarcie tej przestrzeni nazw przed jej użyciem, jak pokazano w poniższym przykładzie.

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

    // ...
}

W przykładzie użyto open dyrektywy , aby zaimportować wszystkie typy i obiekty wywoływane zadeklarowane w przestrzeni nazw Microsoft.Quantum.Artithmetic. Następnie można odwoływać się do nich przez ich niekwalifikowaną nazwę, chyba że ta nazwa powoduje konflikt z deklaracją w bloku przestrzeni nazw lub innej otwartej przestrzeni nazw.

Aby uniknąć wpisywania pełnej nazwy, podczas gdy nadal rozróżniasz, skąd pochodzą określone elementy, możesz zdefiniować alternatywną nazwę lub alias, który jest zwykle krótszy dla określonej przestrzeni nazw. W takim przypadku wszystkie typy i obiekty wywołujące zadeklarowane w tej przestrzeni nazw mogą być kwalifikowane przez zdefiniowaną krótką nazwę. W poprzednim przykładzie jest to przypadek przestrzeni Microsoft.Quantum.Arrays nazw. Funkcja IndexRange zadeklarowana w Microsoft.Quantum.Arrayspliku może być na przykład używana za pośrednictwem Array.IndexRange tego bloku przestrzeni nazw.

Niezależnie od tego, czy otwierasz przestrzeń nazw, czy definiujesz alias, open dyrektywy są prawidłowe tylko w całej przestrzeni nazw w tym pliku.