2011-07-03 10 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 =variablesを入力し、いくつかの値を pにしたいとします。しかし、私はそれをやる方法は見当たりません。なぜなら、私はもう variablesを変更できないようです。 IntMap.add : key -> 'a -> 'a t -> 'a tは値を直接変更しないため動作しません。

このグローバル変数を参照として作成する必要がありますか?

助けてもらえますか?ありがとう、ありがとうございます

答えて

3

あなた自身の質問にお答えします。それは変数になります。 Ocamlは機能的ですが、let x = ...は変数を宣言しません(定数バインディングです)。参照を作成する必要がある変数を取得します。そして実際に、あなたは同様にあなたの機能でそれを変更することができます。

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

とのplsは私の答えはちょうどので、私の評判の悪であると仮定しないでください。) – akoprowski

+0

も...あなたとsepp2k両方@は、私の質問に答えあなたの評判を築くためにこのクレジットが必要かもしれません...私はあなたの答えを受け入れられた答えとして設定しました:-) – SoftTimur

2

はい、マップを変更できるようにするには、地図を参照する必要があります。その後、variables := IntMap.add foo bar !variablesを使用して変更できます。

関連する問題