你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
命名空间
在其顶层,Q# 程序由一组命名空间组成。 除了注释,命名空间是 Q# 程序中唯一的顶级元素,任何其他元素都必须位于命名空间内。 每个文件可能包含零个或多个命名空间,每个命名空间可能跨越多个文件。 Q# 不支持嵌套命名空间。
注意
如果未显式声明命名空间, Q# 编译器将使用文件名作为命名空间名称。
命名空间块由关键字 namespace
、后跟命名空间名称和大括号 { }
内的块的内容组成。
命名空间名称由用点 (.
) 分隔的一个或多个合法符号序列组成。
虽然命名空间名称可能包含点以提高可读性,但 Q# 不支持对命名空间的相对引用。 例如,两个命名空间 Foo
和 Foo.Bar
是不相关的,并且没有层次结构的概念。 特别是,对于 Foo.Bar
中定义的函数 Baz
,不可能打开 Foo
然后通过 Bar.Baz
访问该函数。
Namespace块可能包含 导入指令、 操作、 函数和 类型 声明。 这些元素可以按任意顺序发生,默认情况下递归,这意味着可以按任意顺序声明和使用它们,并且可以自行调用。 在类型或可调用项的声明之前,无需声明。
导入指令
默认情况下,可以访问在同一命名空间中声明的所有内容,而无需进一步限定。 但是,要使用不同命名空间中的声明,只能通过用其所属的命名空间的名称来限定声明的名称或通过在使用之前开放该命名空间来实现,如以下示例所示。
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
别名。 然后,可以使用在命名空间块中Microsoft.Quantum.Arrays
声明的函数IndexRange
,例如,通过Array.IndexRange
该命名空间块。
无论是打开命名空间还是定义别名, import
指令都仅在该文件中的命名空间片段中有效。