Пространства имен
На самом верхнем уровне программа на 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
директивы допустимы только в этом файле.