在Ocaml我有一个“全局”(即有文件范围)数组初始化一些数字,然后我对这些数字做一些操作,然后我调用一个函数来将这些数字求和。现在,因为这个数组是“全局的”,所以我没有费力地将数组作为参数传递,最终发生的是Ocaml计算了初始化数字的总和(在编译时我猜),而不是在对数组进行操作之后已经发生过。我的问题是,为什么会发生这种情况?我花了大约3小时试图追踪错误!这是否与Ocaml的无副作用部分有关?如果是的话,从来没有这样的事情发生的规则是什么?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();;
我想你需要展示一些展现你所说的行为的代码。一般来说,OCaml中的评估顺序很简单。 (在某些情况下,订单具体是未定义的,但这绝对不是这些之一。) –
更新了代码和修复程序,是我的错误.. – foges