我一直在试图弄清楚如何在 OCaml 中调整已经初始化的数组的大小。但是,似乎虽然您可以编写一个函数来创建一个全新的数组,其中复制旧数组的元素(和额外的插槽),但该函数的输出不能分配给现有数组。如何做到这一点?如果不是没有,是否有一种简单的方法可以使用引用来实现这一点?
这是一个小例子:
让 rec function_that_adds_to_array 存储 args ... = (* 假设该函数有一组 if-else 结构来控制它的作用,我们进一步说其中一种情况导致:*) let new_array = Array.make (Array.length storage) ("Null", ("Null", -2)) in Array.blit 集合 0 new_array 0 索引;(* 索引由函数的递归控制 *) Array.set new_array index (obj_name, obj_expr); new_array) (* 在尾部插入宏 *) ... ;; ###主要方法### 让 storage = Array.make 10 ((x : string), (a, b)) in ... 虽然真的做 ... storage = function_that_adds_to_array 存储参数....; ...
function_that_adds_to_array(...) 末尾的 print 语句确认返回了一个新数组,其中包含初始数组的旧元素,但是,在 main 方法中,存储保持不变。这是因为 OCaml 元素的不变性吗?我认为数组是可变的。我环顾四周,有人提到编写 hack 让 OCaml 像 Perl 一样工作,但是,使用个人的 resize hack 函数被证明是徒劳的。有什么办法可以让存储成为一个新的阵列?它需要是一个可更新的元组集合(即 (string, (x, y)) )?