OCaml - 可以单独编译类(没有外部模块)?

时间:2014-03-01 23:04:02

标签: ocaml

previous question asked中,我了解到一个单独的文件是强制模块。对于文件中的类定义,这当然是正确的。我有一个带有类点的文件point.ml,已编译,并且正在使用toplevel:

# #load "point.cmo";;
# let p = new point (1,1);;
Error: Unbound class point
# let p = new Point.point (1,1);;
val p : Point.point = <obj>
# 

有没有办法摆脱外部模块Point?

接受的解决方案

我问过两次,似乎没有办法围绕每个文件生成自动模块。因此,必须调整它,并打开模块,或充分利用模块和对象名称将其转换为功能。还有模块别名,实例化后对象的模块名称无关紧要。

1 个答案:

答案 0 :(得分:1)

您可以打开模块:

# open Point;;

它没有摆脱它,但它打开了顶级名称,无需通过模块名称进行限定。

为了快速测试,您还可以#use在不创建模块的情况下读取源文件:

# use "point.ml";;

您在整个文件中输入的顶级行为。

如果您有名为apple.ml和orange.ml的源文件定义单个类,则只需在每个文件中命名类t即可。然后,您可以从其他模块将这些类称为Apple.tOrange.t。这对我来说效果很好。如果你这样做,你肯定不想打开模块。