我正在运行 Ubuntu,安装了 Ocaml,并编写了以下脚本,正如我在一组说明(课程笔记)中找到的那样:
;; open Assert
;; print_int 1
Run Code Online (Sandbox Code Playgroud)
将此文件另存为test.ml. 然后在终端中,我导航到包含该文件的文件夹并执行
$ ocaml test.ml
Run Code Online (Sandbox Code Playgroud)
包含文件夹具有assert.ml文件和assert.mli. 我查看了这些课程笔记和 Ocaml 网站上的一些文档,除了尝试上述方法之外,找不到任何关于如何打开模块的官方声明。当我运行它时,我收到错误消息
File "test.ml", line 1, characters 8-14:
Error: Unbound module Assert
Run Code Online (Sandbox Code Playgroud)
谁能描述这应该如何工作?
如果您只有 assert.ml 和 assert.mli,那么您需要先编译它们,然后才能在其他代码中使用它们。
您可以像这样直接使用 ocaml 编译器:
$ ocamlc -c assert.mli
$ ocamlc -c assert.ml
Run Code Online (Sandbox Code Playgroud)
这将创建名为 assert.cmi(assert.ml 的编译版本)和 assert.cmo(assert.ml 的编译版本)的文件。
之后,如果你像这样运行你的 test.ml 文件应该可以正常工作:
$ ocaml assert.cmo test.ml
Run Code Online (Sandbox Code Playgroud)
(感谢@camlspotter。)
open如果模块之前不可用,OCaml 中的构造不会导致模块变得可用。它的作用是让名字中的模块直接可用。如果没有open,您需要在名称前加上模块名称:Module.name。在我看来(由其他一些人共享)最好限制使用open,以避免在您的代码范围内引入太多名称。
作为旁注,以;;.开头的行在风格上非常奇怪。此标记用于告诉 OCaml 顶层(解释器)它应该评估您到目前为止输入的内容。所以它通常出现在一些有趣的表达之后。
我个人根本不在;;源文件中使用。我只在将表达式输入到顶层时使用它。
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |