OCaml多次递增可变变量

时间:2014-04-19 11:41:54

标签: ocaml mutable

我对于提出这样一个微不足道的问题感到有点惭愧,但我在这里。

我需要一个函数来增加一个全局定义的可变变量。

let seed_index = ref 0;;

let incr_seed() = 
    seed_index := !seed_index + 1;;

但是,我无法让它在翻译中工作。

# incr_seed();;
- : unit = ()
# seed_index;;
- : int ref = {contents = 0}

1 个答案:

答案 0 :(得分:5)

这应该有效。你确定你向我们展示了所有东西,并且你没有通过重新使用顶层中的定义来迷惑自己吗?

混淆自己的一种方法是在定义函数seed_index后引用之前的incr_seed来定义新的seed_index。这相当于:

let seed_index = ref 0;; (* first definition *)

let incr_seed() = 
    seed_index := !seed_index + 1;;

let seed_index = ref 0;; (* second definition *)

incr_seed();; (* this calls a function that refers to the first seed_index *)

seed_index;; (* this displays the second seed_index *)
- : int ref = {contents = 0}

退出OCaml toplevel并从头开始重启。