我的文件夾中包含多個文件,這是按以下順序編譯:global.ml
,zone.ml
,abs.ml
,main.ml
聲明和全球參考變量幾個文件
global.ml
包含的所有文件有一定的參考變量(例如let g1 = ref 0
)。
在zone.ml
有一個聲明let f = !g1
。
在abs.ml
,有g1 := 5
,將由main
在運行時開始運行,我認爲這是給定的實際運行時上下文的g1
的初始化。
後來main
將調用Zone.f
。奇怪的是,我意識到需要f = 0
而不是f = 5
。
你認爲這種表現是正常的嗎?如果是這樣,我應該改變什麼,以便將當前值!g1
考慮在內?
PS:也許一種解決方案是在zone.ml
中生成函數let f v = v
,然後讓main
調用Zone.f !g1
。但我有幾個全局引用變量g1
global.ml
,我希望它們可以在所有文件和函數中有效,並且我不想讓它們參與函數的簽名。
感謝您的評論,你解釋了爲什麼會發生,但你沒有解釋如何解決它......我不能改變這些文件的編譯順序,我還能做什麼? – SoftTimur 2012-02-05 13:35:31
我添加**編輯**有一些建議。但如果不知道更多關於代碼的知識,很難知道該建議什麼。 – 2012-02-05 16:05:04