共用方式為


參考儲存格

參考數據格 是儲存位置,可讓您建立具有參考語意的可變值。

語法

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# 程式設計人員應該知道ref在 C# 中與 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 程序選項。 如需詳細資訊,請參閱 編譯程式選項

另請參閱