Namespaces
Auf der obersten Ebene besteht ein Q#-Programm aus einer Reihe von Namespaces. Abgesehen von Kommentaren sind Namespaces die einzigen Elemente der obersten Ebene in einem Q#-Programm, und alle anderen Elemente müssen sich in einem Namespace befinden. Jede Datei kann null oder mehr Namespaces enthalten, und jeder Namespace kann mehrere Dateien umfassen. Q#unterstützt keine geschachtelten Namespaces.
Hinweis
Wenn Sie keinen Namespace explizit deklarieren, verwendet der Q# Compiler den Dateinamen als Namespacenamen.
Ein Namespace-Block besteht aus dem Schlüsselwort namespace
, gefolgt vom Namespacenamen und dem Inhalt des Blocks in geschweiften Klammern { }
.
Namespace-Namen bestehen aus einer Sequenz von einem oder mehreren rechtlichen Symbolen, die durch einen Punkt (.
) getrennt sind.
Namespace-Namen können aus Gründen der besseren Lesbarkeit Punkte enthalten, Q# unterstützen jedoch keine relativen Verweise auf Namespaces. Beispielsweise sind zwei Namespaces Foo
und Foo.Bar
nicht verknüpft, und es gibt kein Konzept einer Hierarchie. Insbesondere ist es für eine Baz
-Funktion, die in Foo.Bar
definiert ist, nicht möglich, Foo
über Bar.Baz
zu öffnen und dann auf diese Funktion zuzugreifen.
Namespaceblöcke können Importdirektiven, Vorgänge, Funktionen und Typdeklarationen enthalten. Diese Elemente können in beliebiger Reihenfolge auftreten und standardmäßig rekursiv sein, was bedeutet, dass sie in jeder Reihenfolge deklariert und verwendet werden können und sich selbst aufrufen können. Es ist nicht erforderlich, dass die Deklaration eines Typs oder aufrufbar ist, bevor sie verwendet wird.
Import-Anweisungen
Standardmäßig kann ohne weitere Qualifizierung auf alle im selben Namespace deklarierten Daten zugegriffen werden. Deklarationen in einem anderen Namespace können jedoch nur verwendet werden, indem sie ihren Namen mit dem Namen des Namespace qualifizieren, zu dem sie gehören, oder indem sie diesen Namespace öffnen, bevor er verwendet wird, wie im folgenden Beispiel gezeigt.
namespace Microsoft.Quantum.Samples {
import Microsoft.Quantum.Arithmetic.*;
import Microsoft.Quantum.Arrays.* as Array;
// ...
}
Hinweis
Für Namespaces in der Standardbibliothek Q# kann der Stamm des Namespaces vereinfacht Std
werden. Beispielsweise könnte das vorherige Beispiel wie folgt umgeschrieben werden:
import Std.Arithmetic.*;
import Std.Arrays.* as Array;
Im Beispiel wird eine import
Direktive verwendet, um alle typen und aufrufbaren Elemente zu importieren, die Microsoft.Quantum.Arithmetic
im Namespace deklariert sind. Sie können dann anhand ihres nicht qualifizierten Namens darauf verweisen, es sei denn, dieser Name steht mit einer Deklaration im Namespaceblock oder einem anderen geöffneten Namespace in Konflikt.
Um die Eingabe des vollständigen Namens zu vermeiden und gleichzeitig zu unterscheiden, wo bestimmte Elemente stammen, können Sie einen alternativen Namen oder Alias für einen bestimmten Namespace definieren. In diesem Fall können Sie alle Typen und Aufrufables qualifizieren, die stattdessen durch den definierten Kurznamen in diesem Namespace deklariert wurden.
Im vorherigen Beispiel wird ein Alias für den Microsoft.Quantum.Arrays
Namespace verwendet. Anschließend können Sie die Funktion IndexRange
verwenden, die in Microsoft.Quantum.Arrays
, z. B. über Array.IndexRange
diesen Namespaceblock deklariert ist.
Unabhängig davon, ob Sie einen Namespace öffnen oder einen Alias definieren, import
gelten Direktiven nur für den gesamten Namespace in dieser Datei.