F 入門 十三 Record 記錄

2021-06-04 21:16:18 字數 1866 閱讀 8211

record在f#中是一種很重要的用來存貯資料的結構.它與元組和f# 中的列舉(discriminatedunions)差不多,但是又有比他們更方便的地方,如:我們可以很輕鬆的訪問record中的每個元素的值,而不需要如元組那樣做更多的操作才可取得。

下面我們看看record的定義及與之相關的操作

record的定義

我們使用type 關鍵字來定義record,如我們定義乙個名為myrecord的record:

type myrecord =

在定義這個record 之後,可以將myrecord當作乙個模板,然後照此模板例項化自己的record.如:

let record1 =

let record2 =

let record3 =

這三個record均是由模板myrecord例項化而來的,其interactive執行結果如下:

val record1 : myrecord =

val record2 : myrecord =

val record3 : myrecord =

record的相關操作——獲取元素值

獲取record中元素的值很方便,由於每個元素都如同屬性一樣,我們可以通過使用record名字加上.再加元素名即可獲取其值,如:record1.name就可以得到值「h」。

record的相關操作——複製

有時候我們需要複製乙個已知的record 例項,然後在源record基礎上做小小的改動即可,其實現方法如下:

let copyrecord1 =

這裡我們複製了record1,然後僅改動name的值,其interactive執行結果如下:

val copyrecord1 : myrecord =

record的相關操作——為record新增屬性或方法

record和f# 的列舉一樣,我們可以為之新增屬性和方法,其方法如下:

type advancerecord =

member this.property =  "hi"

member this.printfinfo() = printfn "%s is%d years old" this.namethis.age

這裡我們定義了乙個名為property的屬性,以及乙個名為printfinfo的方法, 其interactive 的執行結果為:

type advancerecord1 =

with

member printfinfo : unit -> unit

member property : string

end使用定義了屬性與方法的record與沒有方法與屬性的record沒有什麼區別。其使用方法和獲取元素值的方法一樣,如:

let advrcd =

advrcd.printfinfo()

其執行結果:

z is 24 years old

record的相關操作——模式匹配

record可以做為模式匹配的一部分,這也是record相比傳統資料型別的一項優勢,在interactive 中執行下面**:

type myrecord =

let record1 =

let record2 =

let record3 =

let recordlist = [ record1; record2; record3 ]

let result =

recordlist

|> list.filter

( function

| -> true

| _ -> false )

其執行結果為:

val it : myrecord list =

record相對於傳統物件導向資料結果的優勢

F 入門學習(十三) 選項

選項表示有兩種取值的狀態 有值或者無值。有值用some 取值。我終於知道前面的學習some是什麼意思了 無值用關鍵字none表示。定義選項常量 let x1 int option some 2 let x2 int option none結果為 val x1 int option some 2 va...

Oracle中的記錄 Record

oracle中可以通過定義記錄來實現一些特定的程式設計要求,通過記錄的形式也可以簡化解決問題的方法。由單行多列的標量構成的復合結構。可以看做是一種使用者自定義資料型別。組成類似於多維陣列。將乙個或多個標量封裝成乙個物件進行操作。是一種臨時復合物件型別。記錄可以直接賦值。record1 record2...

Oracle記錄型別(record 使用

record 儲存單行多列結構的資料.type語句定義記錄型別的語法形式 type 記錄名 is record field1 name data type not null default value fieldn name data type not null default value 例項 定...