F#中的结构(Struct)是值数据类型,它可以帮助您制作一个变量,保存各种数据类型的相关数据, struct 关键字用于创建结构。
语法
[ attributes ] type [accessibility-modifier] type-name = struct type-definition-elements end //or [ attributes ] [<StructAttribute>] type [accessibility-modifier] type-name = type-definition-elements
有两种语法,通常使用第一种语法,因为如果使用 struct 和 end 关键字,则可以省略 StructAttribute 属性。
与类(class)不同,结构(struct)不能被继承并且不能包含let或do绑定,您必须使用 val 关键字在结构中声明字段。
使用 val 关键字定义字段及其类型时,无法初始化字段值,而是将它们初始化为零或null。因此,对于具有隐式构造函数的结构, val 声明使用 DefaultValue 属性进行注释。
下面的程序创建一个线结构以及一个构造函数。程序使用以下结构计算线的长度-
type Line = struct val X1 : float val Y1 : float val X2 : float val Y2 : float new (x1, y1, x2, y2) = {X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;} end let calcLength(a : Line)= let sqr a = a * a sqrt(sqr(a.X1 - a.X2) + sqr(a.Y1 - a.Y2) ) let aLine = new Line(1.0, 1.0, 4.0, 5.0) let length = calcLength aLine printfn "Length of the Line: %g " length
编译并执行程序时,将产生以下输出-
Length of the Line: 5