我是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”字段的值?
答案 0 :(得分:6)
As the documentation states,Array.make
创建一个数组,其元素在物理上相等。如果这些元素是不可变的,那不是问题,但正如你所看到的,如果它们是可变的,你必须考虑到这一点。
您可以使用Array.init
为数组的每个单元格创建不同的对象:
let m = Array.init 10 (fun _ -> {i = 5; b = false});;