次の方法で共有


セルの参照

参照セル は、参照セマンティクスを使用して変更可能な値を作成できるストレージの場所です。

構文

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 コンパイラ オプションを使用します。 詳細については、「コンパイラ オプションの」を参照してください。

こちらも参照ください