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)