OCaml 项目目录结构

use*_*107 5 ocaml

我想在我的源代码树的不同目录中为两个 .ml 源文件提供相同的名称,但 OCaml 文档指出文件 A.ml 导出为顶层模块 A = struct ... end。如果我有两个文件 X/A.ml 和 Y/A.ml,我如何从 B.ml 中引用它们?

jro*_*uie 1

模块可以包含模块,即可以具有模块的层次结构。从 B.ml 的角度来看,您可以看到两个名为X.A和的模块Y.A。它们甚至可以都有一个名为 的函数foo,这些函数将被视为X.A.fooY.A.foo

请注意,如果您open同时使用 moduleXY,则 module AfromY将会隐藏 module Afrom X

这是从命名空间的角度来看的。现在,关于源树。一种方法是拥有这些文件:

  • 毫升
  • X/a.ml
  • y.ml
  • y/a.ml

文件 x.ml 是自动生成的,仅包含以下内容:

module A = struct
(*The contents of x/a.ml is included here*)
end
Run Code Online (Sandbox Code Playgroud)

同样,对于 y.ml 有几个预处理器能够包含文件:cpp、camlp4、camlp5、camlmix...

这套自动生成的文件(并在每次源更改时重新生成)不是很令人满意,我会看看其他答案。

你也可以看看ocamlc -pack,但是我很久以前尝试的时候出现了ocamldoc无法获得 x/a.ml 和 y/a.ml 的问题。因此,在选择工具之前请先检查一下这一点。