在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 ();;