【问题标题】:set a reference equal to another reference in SML将引用设置为等于 SML 中的另一个引用
【发布时间】:2014-03-09 07:20:27
【问题描述】:

是否可以将引用更新为与 SML 中的另一个引用相等?这可能是一个非常愚蠢的问题,但我似乎无法理解它。例如,考虑以下两个引用:

val x1 = ref(NONE);
val x2 = ref(NONE);

(*update so that x1 = x2; returns true*)

如何将 x1 更新为等于 x2。我不是说将 x2 指向的内容放入 x1,我想知道是否可以将它们设置为相等,因此当我测试相等时 (eq x1 = x2) 结果为真。

我想过让它们指向一个新的内存位置。

val z = NONE
x1 := z
x2 := z

这不起作用。我猜我应该再次查看 SML 中的参考资料。感谢您的帮助。

【问题讨论】:

标签: pointers reference functional-programming sml


【解决方案1】:

ML 中没有变量赋值。因此,以两个不同值开始的两个变量永远不会相等。 ref NONE 计算为指向新的可变引用对象的指针;因此对ref 的两次调用将评估为指向不同对象的指针。

它是一个参考并不真正相关。其他类型也一样:

val x1 = 2;
val x2 = 3;
(*update so that x1 = x2; returns true*)

x1 = x2 永远不会是真的。 (至少不是x1x2;如果你定义一个新的x1,那就是另一回事了。)

【讨论】:

    【解决方案2】:

    据我所知,你可以让两个 refs 相等的唯一方法是它们是否相同:

    val x1 = ref NONE
    val x2 = x1
    

    将导致x1 = x2 为真。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2020-10-25
      • 2021-05-23
      • 2014-08-26
      • 1970-01-01
      • 2016-05-20
      相关资源
      最近更新 更多