F# - 结构体



F# 中的结构体是一种值类型数据类型。它可以帮助您使用单个变量来保存各种数据类型的相关数据。struct 关键字用于创建结构体。

语法

定义结构体的语法如下:

[ attributes ]
type [accessibility-modifier] type-name =
   struct
      type-definition-elements
   end
// or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
   type-definition-elements

有两种语法。第一种语法最常用,因为如果您使用structend 关键字,则可以省略StructAttribute 属性。

结构体定义元素提供:

  • 成员声明和定义。
  • 构造函数以及可变和不可变字段。
  • 成员和接口实现。

与类不同,结构体不能被继承,也不能包含 let 或 do 绑定。由于结构体没有 let 绑定,因此必须使用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
广告

© . All rights reserved.