2011-07-03 30 views
2

我有一个关于操作地图作为全局变量的问题。在我的文件的开头,我有:作为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 =中,我想用p中的一些值填写variables。但我不知道该怎么做,因为我似乎无法修改variables了; IntMap.add : key -> 'a -> 'a t -> 'a t不会工作,因为它不直接更改值。

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

任何人都可以帮忙吗?非常感谢你

回答

3

嗯,你有点回答你自己的问题:)。你想要它是一个变量。 Ocaml是功能性的,let x = ...不声明变量(它是一个常量绑定);得到一个你需要做参考的变量。然后,你的确可以修改它在你的功能,如:

variables := IntMap.add foo bar !variables 
+0

和请不要以为我的答案是邪恶的,只是因为我的名气;) – akoprowski

+0

嗯......你和@ sepp2k都回答我的问题,因为你可能需要这个信用来建立你的声誉......我把你的答案设置为接受的答案:-) – SoftTimur

2

是的,如果你想修改地图,你必须把它作为参考。然后您可以使用variables := IntMap.add foo bar !variables进行更改。