我对于提出这样一个微不足道的问题感到有点惭愧,但我在这里。
我需要一个函数来增加一个全局定义的可变变量。
let seed_index = ref 0;;
let incr_seed() =
seed_index := !seed_index + 1;;
但是,我无法让它在翻译中工作。
# incr_seed();;
- : unit = ()
# seed_index;;
- : int ref = {contents = 0}
答案 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并从头开始重启。