SML/NJ-关于=&引用;操作人员

SML/NJ-关于=&引用;操作人员,sml,smlnj,Sml,Smlnj,我对:=操作符做了一些检查,我想确保我得到了它 让- 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不会

我对
:=
操作符做了一些检查,我想确保我得到了它

让-

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不会将
r1
指向与
r2
相同的地址,而只是为
分配新内存!r1
并在此处设置
2


我说得对吗

分配不分配新内存。在
r1:=!r2
,参考
r1
“指向”取自
r2
的值
2
,而不是
r2
本身。因此,以后更新
r2
不会影响它


如果您想要这种效果,则必须使用另一个间接寻址,例如
int-ref
类型。

赋值不会分配新内存。在
r1:=!r2
,参考
r1
“指向”取自
r2
的值
2
,而不是
r2
本身。因此,以后更新
r2
不会影响它


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

是<代码>r1
r2
被初始化为指向不同的数据结构。
:=
操作符只需更改左侧指向的ref结构的值。如果希望
r1
r2
指向同一个ref结构,则可以先不定义
r1
,然后再像
val r1=r2
那样定义它。在最初定义变量后,不可能将其分配给ML中的变量。

是<代码>r1
r2
被初始化为指向不同的数据结构。
:=
操作符只需更改左侧指向的ref结构的值。如果希望
r1
r2
指向同一个ref结构,则可以先不定义
r1
,然后再像
val r1=r2
那样定义它。在最初定义变量后,不可能在ML中为其赋值