在文件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 ???
答案 0 :(得分:4)
您可以在编译模块后尝试#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
)。