7

我是 OCaml 的新手,我想把一些代码放到另一个文件中,比如说foo.ml,就像在 C++ 或 Python 中所做的那样。但是那部分代码本身并不构成一个模块。

我已经包含#use "foo.ml"在我的主要源文件的头部。但是当我使用 构建我的项目时ocamlbuild,它会报告I/O error: "foo.ml: No such file or directory". 但很明显foo.ml是在当前工作目录中。

我想知道是否有人知道如何在 OCaml 中实现该目标并构建我的项目,或者这不是 OCaml 中的约定?欢迎任何建议。

4

2 回答 2

12

#use "foo.ml" is a directive for the interactive toplevel, it doesn't work with the compiler.

If you want to split your code in different files (which is a good idea and is strongly recommended in OCaml), then you should use the module system. Why do you say your code doesn't form a module? If your code consists only of single-use functions, they should be in the same file as the functions that use them. If your code is reusable, then it forms a module.

于 2013-05-16T18:34:27.217 回答
4

正如 Thomash 已经说过的,这可能是您的问题的错误解决方案。

如果您仍然需要它,则必须使用 camlp4 或 cppo 等外部工具

pa_macro 的示例(随 ocaml 提供):

测试2.ml:

let arg = "Hello World"

测试.ml:

INCLUDE "test2.ml"
let () =
   print_endline arg

汇编:

 ocamlfind ocamlc -syntax camlp4o -package camlp4 -ppopt pa_macro.cmo test.ml -o test
于 2013-05-16T18:45:00.537 回答