你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Q# 支持用户定义的 struct 类型。
struct 类型类似于 F# 中的记录类型;它们是不可变的,但支持 复制和更新 构造。
结构类型
struct 类型只能包含命名项,不支持匿名项。 支持命名项的任意组合,尽管无法嵌套项。
例如,以下声明定义了一个结构 Complex,该结构具有两个命名项 Real 和 Imaginary,这两个类型 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 };