Module 在解释模式和编译模式中包括OCaml模块

Module 在解释模式和编译模式中包括OCaml模块,module,ocaml,Module,Ocaml,假设我有一些需要使用Str模块的OCaml代码。如果我用解释器运行代码,那么我必须放入#load Str.cma才能使用Str模块。但是如果我想以本机方式编译代码,那么load指令会导致错误。我如何以在两种情况下都能工作的方式导入模块 我在找两个 (a) 包括在两种模式下工作的模块的方法;或 (b) 一种加载解释器模块的方法,编译器将忽略该模块,让我在命令行上指定它。我不会将#load放入源文件,它不是OCaml代码。这是一个顶级的指导(当然你知道) 一种可能是将所需的#load命令添加到~/.

假设我有一些需要使用
Str
模块的OCaml代码。如果我用解释器运行代码,那么我必须放入
#load Str.cma
才能使用
Str
模块。但是如果我想以本机方式编译代码,那么
load
指令会导致错误。我如何以在两种情况下都能工作的方式导入模块

我在找两个
(a) 包括在两种模式下工作的模块的方法;或
(b) 一种加载解释器模块的方法,编译器将忽略该模块,让我在命令行上指定它。

我不会将
#load
放入源文件,它不是OCaml代码。这是一个顶级的指导(当然你知道)


一种可能是将所需的
#load
命令添加到
~/.ocamlinit
文件中。加载一些额外的模块并没有什么坏处,因此您只能在处理不同的事情时偶尔修改
~/.ocamlinit

如果您希望能够执行
ocaml my_code.ml
my_code.ml
使用
Str
模块,只需执行
ocaml str.cma my_code.ml

就可以像您描述的那样,以脚本方式使用ocaml(使用
ocaml
二进制文件,称为toplevel)。脚本的优点是代码易于访问和更改。但也出现了一些问题:

  • 您的脚本是在每次调用时编译的字节码,这相当快,但远不是最佳的
  • 加载所需包的指令特定于顶层,与编译器不兼容
  • 如果您需要ocaml软件包管理器提供的众多软件包中的一个,则必须在全局范围内安装opam,这目前是linux管理工作,官方不推荐使用
因此,ocaml顶级和编译器调用没有兼容的语法。顶级的命令行参数需要另一个包装器脚本

我的建议是:

  • 使用顶层进行交互式开发、功能探索和测试
  • 将opam安装程序用于包和编译器,这将为您提供可更新的工具
  • 根据需要将脚本编译为字节码或本机代码,编译后的代码在平台内可移植且快速
一旦知道如何指定组件,ocaml程序的编译就相当简单了

附带说明:有一个名为ocamlscript的opam包,它在某种脚本头中为包和依赖项提供特定语法,但将脚本透明地编译到磁盘。也许这是您想要的-但需要安装全局opam