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

类型声明

Q# 支持用户定义的类型。 用户定义的类型类似于 F# 中的记录类型;它们是不可变的,但支持 copy-and-update 构造。

用户定义类型

用户定义的类型可以包含命名项和匿名项。 例如,命名空间中的以下声明定义了类型 Complex,它包含 RealImaginary 这两个命名项,其类型均为 Double

    newtype Complex = (Real: Double, Imaginary : Double);

支持命名项和未命名项的任意组合,内部项也可以命名。 例如,类型 Nested 定义为

newtype Nested = (Double, (ItemName : Int, String)); 

包含类型分别为 DoubleString 的两个匿名项,以及一个 Int 类型的命名项 ItemName

可以通过名称或析构访问包含的项(有关详细信息,请参阅项访问)。 还可以通过 unwrap 运算符访问其中的形状与声明中定义的形状匹配的所有项的元组。

出于两个原因,用户定义的类型非常有用。 首先,只要使用定义类型的库和程序通过项的名称而不是析构来访问项,以后就可以扩展类型来包含更多项,且不会破坏任何库代码。 因此,一般不建议通过析构访问项。

其次,Q# 允许传达对特定数据类型的意图和期望,因为两个用户定义类型的值之间不会自动转换,即使它们的项类型相同。

用户定义的构造函数

用户定义的类型的构造函数由编译器自动生成。 目前无法定义自定义构造函数,不过,将来可能会在语言中添加此功能。