【问题标题】:SML/NJ - about ":=" operatorSML/NJ - 关于 ":=" 运算符
【发布时间】:2013-02-28 03:44:29
【问题描述】:

我对@9​​87654321@ 操作员做了一些检查,我想确保我得到它。

让 -

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 值。

我说的对吗?

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 2010-11-26
        • 2010-10-23
        • 2014-07-15
        • 1970-01-01
        相关资源
        最近更新 更多