OCaml变量,它在函数调用之间保持它的值

时间:2017-11-25 16:31:06

标签: ocaml mutable imperative-programming

在OCaml中是否有办法让函数内部的变量在函数调用之间保持其值?它应该像Pythons默认参数一样工作,它是在每个函数调用中对同一个对象的引用,或者函数应该是yield而不是显式返回一个值。效果应该如下(如果函数是返回自然数):

foo ();;
0
foo ();;
1

1 个答案:

答案 0 :(得分:6)

是的,这是可能的。您需要在闭包的外部定义一个本地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