參考數據格 是儲存位置,可讓您建立具有參考語意的可變值。
語法
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 程序選項。 如需詳細資訊,請參閱 編譯程式選項。