【问题标题】:How to include other source files using the #use directive in OCaml?如何在 OCaml 中使用 #use 指令包含其他源文件?
【发布时间】:2013-05-11 18:05:06
【问题描述】:

我是 OCaml 的新手,我想将一些代码放入另一个文件中,例如 foo.ml,就像在 C++ 或 Python 中所做的那样。但是那部分代码本身并没有形成一个模块。

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

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

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    #use "foo.ml" 是交互式顶层指令,它不适用于编译器。

    如果您想将代码拆分到不同的文件中(这是一个好主意,并且在 OCaml 中强烈推荐),那么您应该使用模块系统。 你为什么说你的代码没有形成一个模块?如果您的代码仅包含一次性函数,则它们应与使用它们的函数位于同一文件中。如果你的代码是可重用的,那么它就形成了一个模块。

    【讨论】:

    • 谢谢,我会采纳你的做法。
    【解决方案2】:

    正如 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
    

    【讨论】:

    • 谢谢。对camlp4很感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2015-07-28
    • 2016-07-31
    • 2021-11-09
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多