OCAML记录字段不可变

时间:2016-12-28 10:26:15

标签: types ocaml mutable records

我有这段代码:

type seed = {c: Graphics.color option; x : int; y : int };;
type voronoi = {dim : int * int; seeds : seed array};;

let v1 = {dim = 50,50; seeds = [| {c=Some Graphics.red; x=50; y=100}; |]}

当我尝试这个时:

v1.seeds.(0).c <- Some Graphics.green;;

我收到此错误:

The record field c is not mutable

我能做什么?

2 个答案:

答案 0 :(得分:3)

记录字段是不可变的,除非另有声明。 OCaml参考手册(sect 1.5)表示

  

记录字段也可以通过赋值修改,只要它们在记录类型的定义中声明为mutable

以下内容应该有效:

type seed = {mutable c: Graphics.color option; x : int; y : int }

答案 1 :(得分:1)

确实,c不可变。

你应该这样写:

v1.seeds.(0) <- {c=Some Graphics.green;x=v1.seeds.(0).x;y=v1.seeds.(0).y};;