你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

命名空间

在其顶层,Q# 程序由一组命名空间组成。 除了注释,命名空间是 Q# 程序中唯一的顶级元素,任何其他元素都必须位于命名空间内。 每个文件可能包含零个或多个命名空间,每个命名空间可能跨越多个文件。 Q# 不支持嵌套命名空间。

命名空间块由关键字 namespace、后跟命名空间名称和大括号 { } 内的块的内容组成。 命名空间名称由用点 (.) 分隔的一个或多个合法符号序列组成。 虽然命名空间名称可能包含点以提高可读性,但 Q# 不支持对命名空间的相对引用。 例如,两个命名空间 FooFoo.Bar 是不相关的,并且没有层次结构的概念。 特别是,对于 Foo.Bar 中定义的函数 Baz,不可能打开 Foo 然后通过 Bar.Baz 访问该函数。

命名空间块可能包含 开放指令 以及 操作函数类型 声明。 这些内容可以按任何顺序出现,并且默认是递归的,这意味着它们可以按任何顺序被声明和使用,并且可以调用自身;不需要在使用之前声明类型或可调用对象。

开放指令

默认情况下,可以访问在同一命名空间中声明的所有内容,而无需进一步限定。 但是,要使用不同命名空间中的声明,只能通过用其所属的命名空间的名称来限定声明的名称或通过在使用之前开放该命名空间来实现,如以下示例所示。

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

    // ...
}

该示例使用 open 指令导入在 Microsoft.Quantum.Artithmetic 命名空间中声明的所有类型和可调用对象。 然后可以通过其非限定名称来引用,除非该名称与命名空间块中的声明或另一个开放的命名空间冲突。

为了仍能区分某些元素的来源,在输入全名的同时,可以为特定命名空间定义一个替代名称或别名,该名称通常更短小。 在这种情况下,在该命名空间中声明的所有类型和可调用对象都可以由定义的短名称来限定。 在前面的示例中,Microsoft.Quantum.Arrays 命名空间就是这种情况。 例如,在 Microsoft.Quantum.Arrays 中声明的函数 IndexRange,可以通过该命名空间块中的 Array.IndexRange 使用。

无论是打开命名空间还是定义别名, open 指令仅在该文件的命名空间片段中有效。