Module 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

在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.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中的这个技巧是由解释器完成的,它是在运行时确定的。