F#結(jié)構(gòu)

2018-12-16 13:56 更新

F#中的結(jié)構(gòu)是值類型數(shù)據(jù)類型。 它幫助您制作單個(gè)變量,保存各種數(shù)據(jù)類型的相關(guān)數(shù)據(jù)。 struct關(guān)鍵字用于創(chuàng)建結(jié)構(gòu)。

語(yǔ)法

語(yǔ)法用于定義結(jié)構(gòu)如下 

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

有兩種語(yǔ)法。 主要使用第一種語(yǔ)法,因?yàn)?,如果使用struct和end關(guān)鍵字,則可以省略StructAttribute屬性。
結(jié)構(gòu)定義元素提供 :
1、成員聲明和定義。
2、構(gòu)造函數(shù)和可變和不可變字段。
3、函數(shù)和接口實(shí)現(xiàn)。
與類不同,結(jié)構(gòu)不能被繼承,并且不能包含let或do綁定。 因?yàn)?,結(jié)構(gòu)沒(méi)有綁定; 您必須使用val關(guān)鍵字聲明結(jié)構(gòu)中的字段。
當(dāng)使用val關(guān)鍵字定義字段及其類型時(shí),無(wú)法初始化字段值,而是將其初始化為零或null。 因此,對(duì)于具有隱式構(gòu)造函數(shù)的結(jié)構(gòu),val聲明使用DefaultValue屬性注釋。

以下程序與構(gòu)造函數(shù)一起創(chuàng)建線結(jié)構(gòu)。 程序使用結(jié)構(gòu)計(jì)算線的長(zhǎng)度 
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

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Length of the Line: 5
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)