ocaml 模块和程序在同一个文件中

ocaml module and program in same file

在 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 函数中并在另一个模块中调用它一样简单。这样做的好处是任何使用模块内部都不需要更改接口(除了公开 run)。

OCaml 的直译为:

 let my_square x = x * x

 let () = 
   if Sys.argv.(0) = "square" then
      print_int (my_square 10)

OCaml 中没有神奇的 __main__ 名称,但您可以模仿它。如果只是链接,该模块将提供一个 my_square 功能。但是,如果程序的名称为 "square",它将打印 my_square(10) 的结果。