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

时间:2016-12-02 17:58:35

标签: arrays ocaml variable-assignment

这是我无法解决的问题,我正在使用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|]}

这个问题的任何解决方案?

2 个答案:

答案 0 :(得分:1)

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

let y = x.b

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

let y = Array.copy x.b

答案 1 :(得分:0)

我专门使用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)));;

这给了我需要的结果。