假设我有一些OCaml代码,我需要使用Str
模块。如果我使用解释器运行代码,那么我必须放置#load Str.cma
才能使用Str
模块。但是如果我想原生编译代码,那么load
指令会导致错误。如何以两种情况下的方式导入模块?
我正在寻找任何一个
(a)包括在两种模式下均有效的模块的方法;或
(b)为解释器加载模块的方法,编译器将忽略该方法,让我在命令行中指定它。
答案 0 :(得分:2)
您可以使用脚本方式使用OCaml(使用名为toplevel的ocaml
二进制文件),就像您所描述的那样。脚本的优点是代码易于访问和更改。但是出现了一些问题:
因此,ocaml toplevel和编译器调用没有兼容的语法。 toplevel的命令行参数需要另一个包装脚本。
我的建议:
一旦您知道如何指定组件,编译对于ocaml程序来说非常简单。
作为旁注:有一个名为ocamlscript的opam包,它为您提供了一种脚本头中的包和依赖项的特定语法,但是将您的脚本透明地编译到磁盘。也许这就是你想要的 - 但需要安装全局opam。
答案 1 :(得分:1)
我不会将#load
放入源文件中,它不是OCaml代码。这是对顶级的指导(当然你知道)。
一种可能性是将#load
命令添加到~/.ocamlinit
文件中。加载一些额外的模块并没有什么坏处,因此您只能在处理不同的事情时偶尔修改~/.ocamlinit
。
答案 2 :(得分:1)
如果您希望height: 68px;
width: 482px;
和ocaml my_code.ml
能够使用my_code.ml
模块,请执行Str
。