在ML中使用ref函数

时间:2013-04-21 17:50:20

标签: sml ml

考虑到ref操作符,我无法理解其应用程序和遵循说明的意义:

1

在这个定义中,我定义了什么?

 - val ref x=ref 9;

 val x = 9 : int

2

这里我用ref x:= ref 12做什么?

 - val x= ref 8;

 val x = ref 8 : int ref

 - ref x := ref 12; 

 val it = () : unit

 - x;

 val it = ref 8 : int ref

2 个答案:

答案 0 :(得分:6)

val ref x = ref 9x定义为9 - 就像您已撰写val x = 9一样。这是因为ref是一个构造函数,所以它的模式与值ref 9匹配模式ref x,它将x绑定到9.当然写它像这样,而不是仅仅写val x = 9就没什么意义了。

当您撰写ref x := ref 12时,您会创建一个引用ref的新int ref ref(类型为x)。然后,您立即更改新的ref以引用ref 12而不是x。由于您创建的新ref永远不会存储在您可能访问的任何位置,因此没有可观察到的效果。

答案 1 :(得分:0)

@ newacct,@ sepp2k我看到这是几年前的事,但是我发现讨论很有用,并希望将Standard ML of New Jersey v110.79 [built: Tue Aug 8 16:57:33 2017]的输出贡献出来:

- val ref x = ref 9;
val x = 9 : int