OCaml-为什么将数组引用设置为默认值

时间:2019-02-23 12:12:22

标签: ocaml

我知道在OCaml中,默认情况下我们无法更改变量的值。例如,我们不能执行以下操作:

let a = 1;
a = 2; 

为此,我们添加了关键字ref

let a = ref 1; a := 2;

但我不了解的是,对于Array,我们不需要这样做。即使数组的类型不是ref 'a,我们也可以更改它的值。 例如,我可以做:

let a = Array.create 3 0; a.(1) <- 2;

没有任何错误。

那么,为什么不使用引用就可以更改Array的值呢?

ref and mutable`和有什么区别?

谢谢!

1 个答案:

答案 0 :(得分:1)

简而言之,可变字段在引用之前排在第一位。实际上,引用类型不是OCaml中的原始类型。定义为

type 'a myref = { mutable contents: 'a}
let ref x = { contents=x }
let (!) r = r.contents
let (:=) r x = r.contents <- x

(另请参见http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#1_References

因此,OCaml中可变值的原始构造块是可变字段,而不是引用。同样,数组的所有字段在设计上都是可变的。