Поделиться через


Пространства имен

На самом верхнем уровне программа на Q# состоит из набора пространств имен. Помимо комментариев, пространства имен являются единственными элементами верхнего уровня в программе Q#. Все остальные элементы должны находиться в пространстве имен. Каждый файл может содержать ноль или более пространств имен, а каждое пространство имен может охватывать несколько файлов. Q# не поддерживает вложенные пространства имен.

Примечание.

Если явно не объявлять пространство имен, Q# компилятор использует имя файла в качестве имени пространства имен.

Блок пространства имен состоит из ключевого слова namespace, за которым следует имя пространства имен и содержимое блока в фигурных скобках { }. Имена пространств имен представляют собой последовательности из одного или нескольких допустимых символов, разделенных точкой (.). Хотя имена пространств имен могут содержать точки для повышения удобочитаемости, Q# не поддерживает относительные ссылки на пространства имен. Например, два пространства имен Foo и Foo.Bar не связаны друг с другом и не образуют иерархию. В частности, если в пространстве имен Foo.Bar определена функция Baz, нельзя открыть пространство имен Foo и получить доступ к этой функции через Bar.Baz.

Блоки пространства имен могут содержать директивы импорта, операции, функции и объявления типов. Эти элементы могут возникать в любом порядке и по умолчанию рекурсивны, то есть они могут быть объявлены и использованы в любом порядке и могут вызываться самостоятельно. Объявление типа или вызываемого типа не требуется, чтобы предшествовать его использованию.

Директивы импорта

По умолчанию все элементы, объявленные в пространстве имен, могут использоваться в его пределах без дополнительного префикса. Однако чтобы использовать объявления из другого пространства имен, необходимо указать его имя перед именем объявленного элемента или предварительно открыть это пространство имен, как показано в примере ниже.

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

    // ...
}

Примечание.

Для пространств имен в стандартной Q# библиотеке корневой каталог пространства имен может быть упрощен Std. Например, предыдущий пример может быть перезаписан следующим образом:

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

В примере используется директива import для импорта всех типов и вызываемых объектов, объявленных в Microsoft.Quantum.Arithmetic пространстве имен. Затем вы можете ссылаться на них по их неквалифицированному имени, если это имя не конфликтует с объявлением в блоке пространства имен или другом открытом пространстве имен.

Чтобы избежать ввода полного имени, по-прежнему различая, откуда приходят определенные элементы, можно определить альтернативное имя или псевдоним для определенного пространства имен. В этом случае можно указать все типы и вызываемые элементы, объявленные в этом пространстве имен, по определенному короткому имени. В предыдущем примере для пространства имен используется псевдоним Microsoft.Quantum.Arrays . Затем можно использовать функцию IndexRange, объявленную в Microsoft.Quantum.Arrays, например, через Array.IndexRange этот блок пространства имен.

Независимо от того, открываете пространство имен или определяете псевдоним, import директивы допустимы только в этом файле.