这是我无法解决的问题,我正在使用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|]}
相反,x
与y
和
x - : sampleType = {a = 5; b = [|1; 6; 3|]}
这个问题的任何解决方案?
答案 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)));;
这给了我需要的结果。