将变量分配给数组元素,其中变量和数组可以在 ocaml 中独立修改

Assign variable to array element where variable and array can be modified independently in ocaml

这是我无法解决的问题,我正在使用 ocaml 将数组的元素复制到新数组。我希望能够彼此独立地修改这些数组,但无论我尝试什么,对一个数组的更改也会反映在另一个数组中。 这是一个简化的例子:

type sampleType = { a : int; b : int array };;
let x = {a = 5; b = [|1, 2, 3|] };;
let y = x.b;;
Array.set y 1 6;;

在 运行 之后我想要这些命令:

y - : int array = [|1; 6; 3|]
x - : sampleType = {a = 5; b = [|1; 2; 3|]}

而是 xy 一起更改,并且

x - : sampleType = {a = 5; b = [|1; 6; 3|]}

这个问题有什么解决办法吗?

正如您从实验中看到的那样,这段代码:

let y = x.b

使 y 引用与 x.b 完全相同的数组。它不会创建独立的数组。创建独立数组,需要复制:

let y = Array.copy x.b

我专门使用 3d 数组,意识到我必须在 3d 数组的最低层而不是顶层应用 Array.copy

let arr = Array.init 3 (fun _ -> Array.init 3 (fun _ -> (Array.init 3 (fun _ -> {faces = [|0;1;2;3;4|]}))));;
let drr = Array.init 3 (fun i -> Array.init 3 (fun j -> Array.copy arr.(i).(j)));;

这给了我需要的结果。