我是OCaml的新手,我想把一些代码放到另一个文件中,比如foo.ml
,就像在C ++或Python中一样。但是这部分代码本身并不构成一个模块。
我已将#use "foo.ml"
包含在我的主要源文件的头部。但是当我使用ocamlbuild
构建项目时,它会报告I/O error: "foo.ml: No such file or directory"
。但显然foo.ml
位于当前工作目录中。
我想知道是否有人知道如何在OCaml中实现这个目标并让我的项目被构建,或者如果这不是OCaml中的惯例?欢迎提出任何建议。
答案 0 :(得分:12)
#use "foo.ml"
是交互式顶层的指令,它不适用于编译器。
如果您想将代码拆分为不同的文件(这是一个好主意,并且强烈建议在OCaml中使用),那么您应该使用模块系统。 为什么说你的代码不构成模块?如果您的代码仅包含一次性函数,则它们应与使用它们的函数位于同一文件中。如果您的代码是可重用的,那么它就形成了一个模块。
答案 1 :(得分:4)
正如Thomash所说,这可能是解决问题的错误方法。
如果您还需要它,您必须使用camlp4或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