你如何在Ocaml中打开一个模块?

时间:2017-09-06 00:50:26

标签: module ocaml

我正在运行Ubuntu,安装Ocaml,并编写了以下脚本,因为我在一组说明中找到它(课程说明):

;; open Assert
;; print_int 1

将此文件另存为test.ml。然后在终端我导航到包含该文件的文件夹并执行

$ ocaml test.ml

包含文件夹包含assert.ml文件和assert.mli。我查看了这些课程笔记和Ocaml网站上的一些文档,除了尝试上述内容之外,我找不到任何关于如何打开模块的官方声明。当我运行它时,我收到错误消息

File "test.ml", line 1, characters 8-14:
Error: Unbound module Assert

有谁可以描述这应该如何运作?

1 个答案:

答案 0 :(得分:3)

如果你只有assert.ml和assert.mli,那么你需要先编译它们才能在其他代码中使用它们。

您可以直接使用ocaml编译器:

$ ocamlc -c assert.mli
$ ocamlc -c assert.ml

这将创建名为assert.cmi(assert.ml的编译版本)和assert.cmo(assert.ml的编译版本)的文件。

之后,如果你运行它,你的test.ml文件应该可以正常工作:

$ ocaml assert.cmo test.ml

(谢谢@camlspotter。)

OCaml中的open构造如果之前不可用,则不会导致模块可用。它的作用是使模块中的名称​​直接可用。如果没有open,则需要在名称前添加模块名称:Module.name。在我看来(由其他人共享)最好限制open的使用,以避免在代码范围中引入太多名称。

作为旁注,使用;;开始你的线条在风格上非常奇怪。此令牌用于告诉OCaml顶层(解释器)它应该评估到目前为止您输入的内容。所以它通常是之后一些有趣的表达。

我个人根本不在源文件中使用;;。我只在将表达式输入到顶层时使用它。