Add*_*dem 2 ocaml read-eval-print-loop
我有名为assert.ml
、和的文件assert.mli
,test.ml
并test.mli
存储在一个文件夹中。 assert
我猜你会称它为库文件吗——它是我下载的,但不是我自己写的。 test.ml
是一个包含脚本的文件
;; open Assert
;; print_endline "test"
Run Code Online (Sandbox Code Playgroud)
在终端中,我导航到包含文件夹并运行
$ ocamlc -c assert.mli test.mli
$ ocaml assert.ml test.ml
Run Code Online (Sandbox Code Playgroud)
结果什么也没有发生。但是,如果我;; open Assert
从脚本中删除该行并运行
$ ocaml test.ml
Run Code Online (Sandbox Code Playgroud)
然后它打印。
请注意,有人告诉我不要写 open 命令,;; open Assert
但建议似乎完全是风格化的。我必须为我正在上的课这样写。
如果有人能向我解释我应该如何以不同的方式编译和运行,我将不胜感激。我尝试按照其他一些指南的建议使用,ocamlopt
但是当我运行它时,结果没有生成可执行文件。
该ocaml
命令是 OCaml 的 REPL。命令行如下所示:
ocaml [ object-files ] [ script-file ]
Run Code Online (Sandbox Code Playgroud)
目标文件是由ocamlc
命令生成的编译(字节码)模块。这些文件以.cmo
. 脚本文件是 OCaml 源代码文件,以.ml
.
请注意,只允许使用一个脚本文件。
你说你正在使用的命令有两个脚本文件,没有目标文件。因此,它不起作用也就不足为奇了。在我的实验中,ocaml
只运行两个脚本文件中的第一个。我相信这解释了你所看到的。你的一个文件产生输出,如果你先给出它就会运行。另一个不产生输出,因此当首先给出该文件时没有输出。
您可能应该做的是.cmo
为Assert
模块生成一个文件。
那看起来像这样:
$ ocamlc -c assert.mli assert.ml test.mli
Run Code Online (Sandbox Code Playgroud)
然后你应该运行ocaml
一个目标文件和一个脚本文件,如下所示:
$ ocaml assert.cmo test.ml
Run Code Online (Sandbox Code Playgroud)