我想在源代码树的不同目录中给两个.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.所以在你找到一个工具之前检查一下.