共用方式為


參考儲存格

參考儲存格是可讓您以參考語意建立可變值的儲存位置。

語法

ref expression

備註

您可以使用 ref 函式建立具有初始值的新參考儲存格。 由於基礎值是可變的,因此您接著可以變更這個基礎值。 參考儲存格不只是地址,還會保存實際值。

下列程式碼範例將示範參考儲存格的宣告和用法。

let xRef = ref 10

printfn "%d" xRef.Value

xRef.Value <- 11

printfn "%d" xRef.Value

輸出如下。

10
11

參考儲存格為 Ref 泛型記錄型別的執行個體,其宣告如下。

type Ref<'a> =
    { mutable contents: 'a }

'a ref 型別是 Ref<'a> 的同義字。 IDE 中的編譯器和 IntelliSense 會對此型別顯示前者,但基礎定義則為後者。

ref 運算子會建立新的參考儲存格。 下列程式碼為 ref 運算子的宣告。

let ref x = { contents = x }

下表顯示參考儲存格上的可用功能。

運算子、成員或欄位 描述 類型 定義
ref (運算子) 將值封裝至新的參考儲存格。 'a -> 'a ref let ref x = { contents = x }
Value (屬性) 取得或設定基礎值。 unit -> 'a member x.Value = x.contents

C# 程式設計人員應該知道 C# 中的 ref 與 F# 中的 ref 並不相同。 F# 中的對等建構是 byrefs,其概念與參考儲存格不同。

標示為 mutable 的值若被關閉擷取,可能會自動升階為 'a ref;請參閱

已被取代的建構

由於 F# 6.0,下列運算子已被取代,若使用將會產生參考警告:

運算子、成員或欄位 描述 類型 定義
! (取值運算子,已被取代) 傳回基礎值。 'a ref -> 'a let (!) r = r.contents
:= (指派運算子,已被取代) 變更基礎值。 'a ref -> 'a -> unit let (:=) r x = r.contents <- x
contents (記錄欄位) 取得或設定基礎值。 'a let ref x = { contents = x }

建議改為直接使用 .Value;請參閱 F# RFC FS-1111

contents 欄位是針對與其他 ML 版本相容而提供,而且會在編譯期間產生警告。 若要停用這個警告,請使用 --mlcompatibility 編譯器選項。 如需詳細資訊,請參閱編譯器選項

另請參閱