1

我是 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”字段的值?

4

1 回答 1

6

正如文档所述Array.make创建一个其元素在物理上都相等的数组。如果这些元素是不可变的,这不是问题,但正如您所见,如果它们是可变的,您必须考虑到这一点。

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

let m = Array.init 10 (fun _ -> {i = 5; b = false});;
于 2013-05-01T20:55:16.720 回答