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

类型声明

Q# 支持用户定义的 struct 类型。 struct 类型类似于 F# 中的记录类型;它们是不可变的,但支持 复制和更新 构造。

结构类型

struct 类型只能包含命名项,不支持匿名项。 支持命名项的任意组合,但不能嵌套项。

例如,以下声明定义了一个结构 Complex,该结构具有两个命名项 RealImaginary,这两个类型 Double

struct Complex {
    Real : Double,
    Imaginary : Double,
}

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

struct 类型十分有用,原因有两个。 首先,只要使用定义的类型的库和程序通过其名称(而不是解构)访问项,就可以扩展该类型以包含其他项,而无需中断任何库代码。 因此,通常不建议通过解构访问项目。

其次,Q# 允许传达特定数据类型的意向和期望,因为两种 struct 类型的值之间没有自动转换,即使它们的项类型相同。

结构构造函数

当编译器读取 struct 定义时,新 struct 类型的构造函数会自动生成。 对于上一示例中的 Complex 结构,可以使用 创建实例

let complexPair = Complex(1.4, 2.1);

还可以使用 new 关键字的用户定义实例,例如

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

还可以使用 ... 语法复制现有结构

let copyPair = new Complex { ...complexPair };

复制时,可以指定要更改的各个字段

let updatedPair = new Complex { ...complexPair, Real = 3.5 };