0

オペレーターについていくつかのチェックを行いましたが:=、問題がないことを確認したいと思います。

させて -

val r1 = ref 1 ;  (* !r1 = 1 *)
val r2 = ref 2 ;  (* !r2 = 2 *)
val r3 = ref 3 ;  (* !r3 = 3 *)

r1 := !r2 ; (* !r1 = 2 *)
r2 := !r3 ; (* !r2 = 3 *)
!r1 ;  (* still !r1 = 2 *)

r2 := !r3 ;どうやらそれによって!r1値も変更されると思いました が、発生しませんでした。そのため、と同じアドレスをr1 := !r2 ;指していないようですが 、新しいメモリを割り当ててそこに値 を設定するだけです。r1r2!r12

私は正しいですか?

4

2 に答える 2

4

代入は新しいメモリを割り当てません。の後r1 := !r2、参照は、それ自体ではなく、から取得r1した値を「ポイント」します。したがって、後で更新しても影響はありません。2r2r2r2

そのような効果が必要な場合は、int ref refタイプなどの別の間接化を使用する必要があります。

于 2013-02-27T12:24:56.173 に答える
0

はい。異なるデータ構造を指すように初期化されましたr1r2演算子は:=、左側が指す ref 構造体の値を変更するだけです。同じ ref 構造を参照したい場合は、最初に定義せずr1、後でのように定義することもできます。最初に定義された後、ML の変数に割り当てることはできません。r2r1val r1 = r2

于 2013-02-27T19:44:29.257 に答える