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 例項 定...