OCaml变量,它保持函数调用之间的值
问题描述:
在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
我不明白为什么本地模块和该模块的接口隐藏是不可接受的。这与观察性地区的功能有何不同? –