ocaml - 具有可变字段的记录数组

时间:2013-05-01 20:47:14

标签: ocaml mutable records

我是OCaml的新手,我正在尝试理解mutable record field的概念。

我想创建一个记录数组,该记录包含一个布尔可变字段。所以我做了类似的事情:

type t = {i: int; mutable b: bool};;

我希望能够更改记录的'b'字段的值,所以我把它mutable

let m = Array.make 10 ({i = 5; b = false});;

这里我尝试设置位于我的数组的第一个索引处的记录的 b 字段:

(Array.get m 0).b <- true;;

问题是我想要它,它会设置数组所有记录的'b'字段,这不是我想要的。

同一记录的可变字段是否共享相同的内存位置?如何更改特定记录的“b”字段的值?

1 个答案:

答案 0 :(得分:6)

As the documentation statesArray.make创建一个数组,其元素在物理上相等。如果这些元素是不可变的,那不是问题,但正如你所看到的,如果它们是可变的,你必须考虑到这一点。

您可以使用Array.init为数组的每个单元格创建不同的对象:

let m = Array.init 10 (fun _ -> {i = 5; b = false});;