Udostępnij za pośrednictwem


Przestrzenie nazw

Na najwyższym poziomie Q# program składa się z zestawu przestrzeni nazw. Oprócz komentarzy 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.

Uwaga

Jeśli nie deklarujesz jawnie przestrzeni nazw, Q# kompilator używa nazwy pliku jako nazwy 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 w przypadku funkcji Baz zdefiniowanej w Foo.Barpliku nie można otworzyć Foo funkcji, a następnie uzyskać do niej dostęp za pośrednictwem metody Bar.Baz.

Bloki przestrzeni nazw mogą zawierać dyrektywy importu, operacje, funkcje i deklaracje typów. Te elementy mogą występować w dowolnej kolejności i domyślnie rekursywne, co oznacza, że mogą być deklarowane i używane w dowolnej kolejności i mogą wywoływać się samodzielnie. Nie ma potrzeby deklarowania typu lub wywoływania, aby poprzedzać jego użycie.

Dyrektywy importu

Domyślnie dostęp do wszystkich zadeklarowanych w tej samej przestrzeni nazw można uzyskać bez dalszej kwalifikacji. Deklaracje w innej przestrzeni nazw mogą być jednak używane tylko przez kwalifikowanie 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 {
    
    import Microsoft.Quantum.Arithmetic.*; 
    import Microsoft.Quantum.Arrays.* as Array; 

    // ...
}

Uwaga

W przypadku przestrzeni nazw w bibliotece standardowej Q# katalog główny przestrzeni nazw może zostać uproszczony do Std. Na przykład poprzedni przykład może zostać przepisany jako:

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

W przykładzie użyto import dyrektywy , aby zaimportować wszystkie typy i wywołania zadeklarowane w Microsoft.Quantum.Arithmetic przestrzeni nazw. Następnie można odwoływać się do nich według ich niekwalifikowanej nazwy, 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 dla określonej przestrzeni nazw. W takim przypadku można zakwalifikować wszystkie typy i wywołania zadeklarowane w tej przestrzeni nazw za pomocą zdefiniowanej krótkiej nazwy. W poprzednim przykładzie użyto aliasu Microsoft.Quantum.Arrays dla przestrzeni nazw. Następnie można użyć funkcji IndexRange, zadeklarowanej w Microsoft.Quantum.Arrayspliku , na przykład za pośrednictwem Array.IndexRange tego bloku przestrzeni nazw.

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