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 ;也会导致!r1value 发生变化,但这并没有发生,所以它似乎r1 := !r2 ;没有指向r1相同的地址r2 ,而只是为其分配新内存!r1并在那里设置2值。

我对吗 ?

4

2 回答 2

4

赋值不分配新内存。之后r1 := !r2,引用r1“指向”2取自的值r2,而不是指向r2自身。因此,r2稍后更新不会影响它。

如果你想要这样的效果,那么你必须使用另一种间接方式,例如int ref ref类型。

于 2013-02-27T12:24:56.173 回答
0

是的。r1并被r2初始化为指向不同的数据结构。:=运算符只是更改左侧指向的 ref 结构的值。如果你想r1r2指向同一个 ref 结构,你可能r1最初没有定义,然后像val r1 = r2. ML 中的变量在初始定义后就无法赋值。

于 2013-02-27T19:44:29.257 回答