Sml 在ML中使用ref函数

Sml 在ML中使用ref函数,sml,ml,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 val ref x=ref 9将x定义为9

考虑到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

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


当您写入
ref x:=ref 12
时,您将创建一个新的
ref
(类型为
int-ref-ref
)引用
x
。然后立即将新的
ref
更改为引用
ref 12
,而不是
x
。由于您创建的新
ref
从未存储在您可能访问的任何地方,因此这将不会产生明显的效果。

@newacct,@sepp2k我看到这是几年前的内容,但我发现讨论很有用,并希望从新泽西v110.79的
标准ML[构建:2017年8月8日星期二16:57:33]

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

有趣的是,
ref
可以在SML的模式匹配中解包。“
ref
是一个构造函数”似乎没有文档记录anywhere@newacct老实说,我不完全确定这是标准行为还是特定于实现(而且我手头没有标准可供检查)。