映射为Ocaml中的全局变量

时间:2011-07-03 13:56:30

标签: map global-variables ocaml

我有一个关于将地图作为全局变量进行操作的问题。在我的文件的开头,我有:

module IntOrd = struct type t = int let compare = ( - ) end
module IntMap = Map.Make( IntOrd )

然后我想通过let variables = IntMap.empty声明一个全局变量,然后在这个文件的某些函数中修改variables。例如,在函数let analyze (p: s_program) : unit =中,我想用variables中的某些值填充p。但我不明白该怎么做,因为我似乎无法修改variables; IntMap.add : key -> 'a -> 'a t -> 'a t无法正常工作,因为它不会直接更改值。

我是否必须将此全局变量作为参考?

有人可以帮忙吗?非常感谢你

2 个答案:

答案 0 :(得分:3)

嗯,你回答了自己的问题:)。您希望它是变量。 Ocaml是有效的,let x = ...不声明变量(它是一个常量绑定);要获得一个变量,你需要做一个参考。然后你可以在你的函数中修改它,如:

variables := IntMap.add foo bar !variables

答案 1 :(得分:2)

是的,如果您希望能够修改地图,则必须将其作为参考。然后,您可以使用variables := IntMap.add foo bar !variables更改它。