OCaml项目目录结构

我想在源代码树的不同目录中给两个.ml源文件同名,但是OCaml文档声明a文件A.ml被导出为顶层模块A = struct … end.如果我有两个文件X / A.ml和Y / A.ml,我如何从B.ml中引用它们? 最佳答案 模块可以包含模块,即您可以拥有模块层次结构.

从B.ml的角度来看,您可以看到两个名为X.A和Y.A的模块.

它们甚至可以都有一个名为foo的函数,这些函数将被视为X.A.foo和Y.A.foo.

请注意,如果打开模块X和Y,则Y中的模块A将从X隐藏模块A.

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

> x.ml
> X / a.ml
> y.ml
> y / a.ml

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

module A = struct
(*The contents of x/a.ml is included here*)
end

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

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

你也可以看看ocamlc -pack,但是当我很久以前尝试过它时,ocamldoc无法获得x / a.ml和y / a.ml.所以在你找到一个工具之前检查一下.

点赞