在 Ocaml 中,我有一个用一些数字初始化的“全局”(即具有文件范围)数组,然后我对这些数字进行一些操作,然后调用一个函数将这些数字相加。现在因为这个数组是“全局的”,所以我没有费心将数组作为参数传递,最终发生的是 Ocaml 计算了初始化数字的总和(我猜是在编译时)而不是在我对数组进行操作之后已经发生过。我的问题是,为什么会发生这种情况?我花了大约 3 小时试图找出错误!这是否与 Ocaml 的无副作用部分有关?如果是这样,那么永远不会发生这样的事情的规则是什么?
谢谢
编辑:你们说得非常对,我从根本上搞砸了。这基本上是我的代码
let my_array = Array.make 10 0;;
let sum_array = ...;;
let my_fun =
do_stuff_with_array args;
sum_array;;
所以当然sum_array
是事先计算好的。把它改成这个,它工作,这是最好的解决方案吗?
let my_array = Array.make 10 0;;
let sum_array _ = ...;;
let my_fun =
do_stuff_with_array args;
sum_array ();;