在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?
接受的解决方案
我问过两次,似乎没有办法围绕每个文件生成自动模块。因此,必须调整它,并打开模块,或充分利用模块和对象名称将其转换为功能。还有模块别名,实例化后对象的模块名称无关紧要。
答案 0 :(得分:1)
您可以打开模块:
# open Point;;
它没有摆脱它,但它打开了顶级名称,无需通过模块名称进行限定。
为了快速测试,您还可以#use
在不创建模块的情况下读取源文件:
# use "point.ml";;
您在整个文件中输入的顶级行为。
如果您有名为apple.ml和orange.ml的源文件定义单个类,则只需在每个文件中命名类t
即可。然后,您可以从其他模块将这些类称为Apple.t
和Orange.t
。这对我来说效果很好。如果你这样做,你肯定不想打开模块。