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

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

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

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

Директивы open

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

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

    // ...
}

В примере используется директива open для импорта всех типов и вызываемых объектов, объявленных в пространстве имен Microsoft.Quantum.Artithmetic. После этого к ним можно обращаться по неполным именам, если имя не конфликтует с объявлением в блоке текущего или другого открытого пространства имен.

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

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