F 入門 八 值型別 引用型別

2022-07-04 21:48:08 字數 1032 閱讀 4854

總得來說,資料值儲存在棧上面的稱為值型別,而資料值儲存在堆上面的稱為引用型別。

對於f#而言,每個宣告的值都會在建立時被初始化,因為在函式式的程式設計中,值被宣告後就是不可變的。下面看看怎麼獲取某個值的情況:

unchecked.defaultof<'a>

獲取'a的預設值

typeof<'a>

返回描述'a的system.type物件

sizeof<'a>

返回'a在棧上的空間大小

在f#中,預設所有值是不能更改的,那麼怎麼樣來改變乙個值呢,乙個方法是用ref引用單元(主要用於引用型別的更改),還有用mutable關鍵字(主要用於值型別的更改),下篇會講關於mutable。

這裡使用ref將值變為引用型別,同時,使用!讀取引用型別的值,使用:=寫入引用型別的值。讓我們來看看例子:

1)//將引用型別的值繫結給變數a

> let a = ref "hello";;

val a : string ref =

//讀取a的值

> !a;;

val it : string = "hello"

//寫入a的值然後顯示

> a := "world";;

val it : unit = ()

> !a;;

val it : string = "world"

2)//對於引用型別改變值

> let days =

ref [ "monday"; "tuesday";

"wednesday"; "thursday";

"friday";  "saturday";

"sunday";]

//過濾掉星期天

// 通過(!)獲取days的,再通過(:=)賦予新的值

days := !days |> list.filter(fun d -> d <> "sunday");;

val days : string list ref =

值型別 引用型別

在 c 中有兩種型別的資料,一種是值型別資料,一種是引用型別資料。在編碼的時候區分這兩種型別資料,可以避免一些細小的編碼錯誤。首先說說什麼型別是值型別,例如 int float bool之類的基礎型別,以及用struct定義的型別,如 datetime。除此外,如string,陣列,以及用class...

值型別 引用型別

值型別當乙個值型別賦值給另乙個值型別的時候,預設情況下完成的是乙個成員到另乙個成員的複製。引用型別 引用型別分配在託管堆上。其物件一直保留在記憶體中,直到.net垃圾 器將它們銷毀。預設情況下,乙個引用型別的賦值將new出乙個對該堆上同乙個物件的新引用 new關鍵字返回的是乙個指向堆上物件的引用,而...

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...