我正在运行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
有谁可以描述这应该如何运作?
答案 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顶层(解释器)它应该评估到目前为止您输入的内容。所以它通常是之后一些有趣的表达。
我个人根本不在源文件中使用;;
。我只在将表达式输入到顶层时使用它。