在OCaml中有一種方法可以使函數內的變量保持函數調用之間的值嗎?它應該像Pythons默認參數一樣工作,該參數是每個函數調用中對同一對象的引用,或者函數應該產生並且不顯式返回值。效果應該如下(如果函數返回自然數):OCaml變量,它保持函數調用之間的值
foo();;
0
foo();;
1
在OCaml中有一種方法可以使函數內的變量保持函數調用之間的值嗎?它應該像Pythons默認參數一樣工作,該參數是每個函數調用中對同一對象的引用,或者函數應該產生並且不顯式返回值。效果應該如下(如果函數返回自然數):OCaml變量,它保持函數調用之間的值
foo();;
0
foo();;
1
是的,這是可能的。您需要定義一個本地ref
外界封閉的並訪問其價值和每一個封閉使用像這樣的時間進行修改:
let foo =
(* local variable x *)
let x = ref 0 in
(* the closure that will be named foo *)
fun() -> let r = !x in
x := r+1; r
不*有*的變量是本地的功能?您可以將變量置於模塊的本地。這就是說,這聽起來像個壞主意。 ocaml鼓勵功能性,無副作用的編程,但事實並非如此。你爲什麼想這樣做?真正的問題是什麼? –
@EricLippert必須是本地功能。不能是全球性的。 – Leftismer
我不明白爲什麼本地模塊和該模塊的接口隱藏是不可接受的。這與觀察性地區的功能有何不同? –