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中为其赋值