关于基本文件组织

时间:2011-01-16 23:42:53

标签: ocaml

在文件testmodule.ml

module TestModule =
struct
  type my_type = MyType1 | MyType2
end

如何在顶层使用TestModule?

在“ocamlc -c testmodule.ml”之后(这生成了testmodule.cmo / cmi)

我试过“打开TestModule”,但发生错误“未绑定模块TestModule”。

        Objective Caml version 3.10.0

# open TestModule;;
Unbound module TestModule

然后,我尝试使用该模块制作顶级。但...

indi@www:~/std/toq$ ocamlmktop -o mytop testmodule.ml
indi@www:~/std/toq$ ./mytop
        Objective Caml version 3.10.0

# TestModule.MyType1;;
Unbound constructor TestModule.MyType1
# open TestModule;;
Unbound module TestModule

如何使用我的TestModule ???

3 个答案:

答案 0 :(得分:4)

列出in the manual

列出了您可以在顶层使用的指令。{/ 3}

您可以在编译模块后尝试#use "testmodule.ml";;,或者#load "testmodule.cmo";;

答案 1 :(得分:2)

正如huitseeker所提到的,你可以使用#use "testmodule.ml";;。但是,这会使模块Testmodule变得可用,而您的TestModule模块实际上是Testmodule.TestModule.cmo个文件(从.ml文件生成)定义一个模块,其名称是CMO的名称,首字母大写。因此,我会省略代码的module TestModule ...部分,只需将代码放在名为testModule.ml的文件中即可。然后,您可以编译它并使用#use "testModule.ml";;访问该模块。

答案 2 :(得分:0)

涂总结:一些小细节全部密谋对你: - )

首先,如前所述,您需要将代码加载到顶层,源文件为#use "testmodule.ml";;,编译文件为#load "testmodule.cmo";;,或使用ocamlmktop。这解释了为什么您的第一次尝试不起作用:您没有加载代码。

其次,您在名为module TestModule的文件中定义了testmodule.ml。请记住,该文件根据其名称定义自己的模块。因此,要访问您的模块,您需要编写Testmodule.TestModule。这解释了为什么你的第二次尝试不起作用:代码已加载,但有一个意外的名字。

您可能希望删除TestModule定义并将文件重命名为testModule.ml(或者更为惯用的test_module.ml)。