Sdílet prostřednictvím


Obory názvů

Na nejvyšší úrovni Q# se program skládá ze sady oborů názvů. Kromě komentářů jsou obory názvů jedinými prvky nejvyšší úrovně v Q# programu a všechny ostatní prvky se musí nacházet v oboru názvů. Každý soubor může obsahovat nula nebo více oborů názvů a každý obor názvů může zahrnovat více souborů. Q# nepodporuje vnořené obory názvů.

Poznámka:

Pokud explicitně deklarujete obor názvů, Q# kompilátor použije název souboru jako název oboru názvů.

Blok oboru názvů se skládá z klíčového slova namespace, následovaného názvem oboru názvů a obsah bloku uvnitř závorek { }. Názvy oborů názvů se skládají z jedné nebo více právních symbolů oddělených tečkou (.). I když názvy oborů názvů mohou obsahovat tečky pro lepší čitelnost, Q# nepodporuje relativní odkazy na obory názvů. Například dva obory Foo názvů a Foo.Bar nesouvisejí a neexistuje žádný pojem hierarchie. Zejména pro funkci definovanou v Foo.Bar, není možné otevřít Foo a pak k této funkci přistupovat prostřednictvím Bar.Baz.Baz

Bloky oboru názvů mohou obsahovat direktivy importu, operace, funkce a deklarace typů . Tyto prvky mohou nastat v libovolném pořadí a jsou ve výchozím nastavení rekurzivní, což znamená, že lze deklarovat a používat v libovolném pořadí a mohou se volat sami. Není nutné, aby deklarace typu nebo volatelná před jejím použitím.

Direktivy importu

Ve výchozím nastavení je vše deklarované ve stejném oboru názvů přístupné bez další kvalifikace. Deklarace v jiném oboru názvů je však možné použít pouze tak, že opravníte jejich název s názvem oboru názvů, do kterého patří, nebo otevřením tohoto oboru názvů před jeho použitím, jak je znázorněno v následujícím příkladu.

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

    // ...
}

Poznámka:

Pro obory názvů ve standardní Q# knihovně může být kořen oboru názvů zjednodušen na Std. Předchozí příklad může být například přepsaný takto:

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

Příklad používá direktivu k importu import všech typů a volatelných deklarovaných v Microsoft.Quantum.Arithmetic oboru názvů. Na ně pak můžete odkazovat podle jejich nekvalifikovaného názvu, pokud tento název není v konfliktu s deklarací v bloku oboru názvů nebo jiným otevřeným oborem názvů.

Pokud se chcete vyhnout zadávání celého názvu a přitom rozlišovat, odkud některé prvky pocházejí, můžete definovat alternativní název nebo alias pro konkrétní obor názvů. V tomto případě můžete kvalifikovat všechny typy a volatelné typy deklarované v tomto oboru názvů definovaným krátkým názvem. Předchozí příklad používá alias pro Microsoft.Quantum.Arrays obor názvů. Pak můžete použít funkci IndexRangedeklarovanou například Microsoft.Quantum.Arraysv Array.IndexRange rámci daného bloku oboru názvů.

Bez ohledu na to, jestli otevíráte obor názvů nebo definujete alias, import jsou direktivy platné pouze v celé části oboru názvů v daném souboru.