在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