我是OCaml的新手,我想把一些代码放到另一个文件中,比如foo.ml
,就像在c++或Python中做的那样。但是这部分代码本身并不能构成一个模块。
我在主源文件的头部包含了#use "foo.ml"
。但是当我使用ocamlbuild
构建我的项目时,它报告I/O error: "foo.ml: No such file or directory"
。但显然foo.ml
在当前工作目录中。
我想知道是否有人知道如何在OCaml中实现这一目标,并让我的项目被构建,或者如果这不是OCaml中的约定?
#use "foo.ml"
是一个用于交互顶层的指令,它不能与编译器一起工作。
如果你想在不同的文件中拆分你的代码(这是一个好主意,在OCaml中强烈推荐),那么你应该使用模块系统。为什么你说你的代码没有形成一个模块?如果您的代码只包含单次使用的函数,那么它们应该与使用它们的函数放在同一个文件中。如果你的代码是可重用的,那么它就形成了一个模块。
正如Thomash已经说过的,这可能是解决你问题的错误方法。
如果你需要它,你必须使用camp4或外部工具,如cppo。
示例pa_macro (ocaml附带):
test2.ml:
let arg = "Hello World"
test.ml:
INCLUDE "test2.ml"
let () =
print_endline arg
编译: ocamlfind ocamlc -syntax camlp4o -package camlp4 -ppopt pa_macro.cmo test.ml -o test