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

OCaml-可以单独编译一个类(没有外部模块)?,ocaml,Ocaml,在一次会议上,我了解到一个单独的文件强制成为一个模块。对于文件中的类定义,这当然是正确的。我有一个文件point.ml,其中包含类point,已编译,并且正在顶层执行以下操作: # #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.c

在一次会议上,我了解到一个单独的文件强制成为一个模块。对于文件中的类定义,这当然是正确的。我有一个文件point.ml,其中包含类point,已编译,并且正在顶层执行以下操作:

# #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.cmo”;;
#设p=新点(1,1);;
错误:未绑定的类点
#设p=新点。点(1,1);;
val p:Point.Point=
# 
有没有办法摆脱外部模块点

公认的解决方案


我问了两次,似乎没有办法自动生成每个文件的模块。因此,我们必须适应它,要么打开模块,要么最好地利用模块和对象名称将其转化为功能。仍然存在模块别名,并且实例化后对象的模块名称非常不相关。

您可以打开模块:

# open Point;;
它并没有摆脱它,但它打开了顶级名称供使用,而无需通过模块名进行限定

对于快速测试,您还可以执行
#使用
读取源文件而不创建模块:

# use "point.ml";;
顶层的行为就像您键入了整个文件一样


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

这是你通常做的吗?老实说,我很少使用
open
。否则,您必须非常小心地命名。对于顶层的快速测试,我使用
#use
指令。