2013-12-14 65 views
7

我最近正在閱讀一個OCaml項目,我想將源文件放在utop中,這樣我可以做一些實驗。
假設我有兩個文件amodule.ml,bmodule.ml
bmodule.ml將使用定義函數amodule.ml,例如,bmodule使用Amodule.anyfunction()其中anyfunction()定義amodule.ml
我想在UTOP把他們兩個人:在OCaml中使用幾個模塊utop

#directory "/directory contain amodule.ml and bmodule.ml" 
#use "amodule.ml" 
#use "bmodule.ml" 

這不起作用,因爲Amodule是在模塊名稱基amodule.ml文件和UTOP不知道這些東西,我想。
因此,如何我可以把這些文件放在UTOP不改變文件內容?

+0

您是否嘗試過'cd'到amodule.ml和bmodule.ml所在的文件夾,然後在那裏鍵入'utop'? –

+0

是的,但它仍然不起作用。 – KUN

+0

你是什麼意思,它不起作用?你能發佈截圖或完整的utop文本嗎? –

回答

8

#use a.ml執行a.ml每個語句就像你曾直接輸入頂層的語句。因此,你沒有定義module A,所以你的其他文件不能有A.foo之類的東西。如果你想要module A,你必須首先字節編譯a.ml,然後#load a.cmo

+4

較新版本的OCaml支持'#use_mod',它應該允許在沒有事先編譯的情況下使用。 – hcarty

+3

@hcarty提到的指令實際上是'#mod_use',確實非常方便。 :) –

+2

'#mod_use'正是我失蹤的難題。謝謝@ShonFeder!我不能相信真實世界OCaml甚至沒有提到它。 – Tobia