Module ocaml模块和程序位于同一文件中
在ocaml中是否可以有一个Module ocaml模块和程序位于同一文件中,module,ocaml,Module,Ocaml,在ocaml中是否可以有一个.ml文件,该文件提供了一个可从另一个文件使用的函数,但也可以作为独立程序使用 让我举例说明。在Python中,可以执行以下操作: #This file is square.py def my_square(i) : print "square of %d is %d" % (i,i*i) if __name__ == '__main__' : my_square(10) 现在,我可以作为一个独立程序运行上面的程序:python square.p
.ml
文件,该文件提供了一个可从另一个文件使用的函数,但也可以作为独立程序使用
让我举例说明。在Python中,可以执行以下操作:
#This file is square.py
def my_square(i) :
print "square of %d is %d" % (i,i*i)
if __name__ == '__main__' :
my_square(10)
现在,我可以作为一个独立程序运行上面的程序:python square.py
,但我也可以通过说import square
来从另一个文件中包含它,以访问square
函数
如何(如果可能的话)在ocaml中做到这一点
谢谢 模块可以在OCaml中包含有效的表达式,但是没有像Python示例中那样清晰地条件化它们。可能实现相同效果的最合理方法是将条件代码移动到另一个模块中,并将其用作程序
这可以简单到将程序部分包装在
run
函数中,然后在另一个模块中调用它。这样做的好处是,模块内部的任何使用都不需要更改接口(除了公开运行)。到OCaml的直译为:
let my_square x = x * x
let () =
if Sys.argv.(0) = "square" then
print_int (my_square 10)
OCaml中没有神奇的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu主\uuuuuuuuuuuu
名称,但您可以模仿它。如果刚刚链接,此模块将提供my_square
功能。但是如果程序名为“square”
,它将打印我的square(10)
的结果 否,因为python中的这个技巧是由解释器完成的,它是在运行时确定的。