参照セル は、参照セマンティクスを使用して変更可能な値を作成できるストレージの場所です。
構文
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# の同等のコンストラクトは byref であり、参照セルとは異なる概念です。
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
コンパイラ オプションを使用します。 詳細については、「コンパイラ オプションの」を参照してください。
こちらも参照ください
.NET