2015-11-20 48 views
1

假设我有一些OCaml代码,我需要使用Str模块。如果我用解释器运行代码,那么我必须让#load Str.cma能够使用Str模块。但是,如果我想本机编译代码,那么load指令会导致错误。我怎样才能以这种方式导入模块? (a)一种包含可在两种模式下工作的模块的方法;或者(b)一种加载解释器模块的方式,编译器会忽略它,让我在命令行中指定它。在解释和编译模式下包含OCaml模块

回答

1

我不会把#load放入源文件,它不是OCaml代码。这是对顶层的指示(当然你知道)。

一种可能性是将您需要的#load命令添加到您的~/.ocamlinit文件中。加载一些额外的模块并不会造成伤害,所以您可以在您处理不同事情时偶尔修改您的~/.ocamlinit

1

如果您希望能够做到ocaml my_code.mlmy_code.ml使用Str模块,请执行ocaml str.cma my_code.ml

2

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

  • 在每次调用,这是相当快的,但是从最佳
  • 远远加载需要的软件包的指令是特定于顶层,并与编译器不兼容的脚本字节码编译
  • 如果你需要从opam必须全局安装OPAM OCaml的包管理器的许多包目前是Linux管理员的工作,而不是正式推荐

之一,所以有对ocaml的顶部没有兼容语法级别和编译器调用。顶层的命令行参数需要另一个包装脚本。

我的建议:

  • 使用互动发展,特色探索顶层和测试
  • 使用OPAM安装程序为您的包裹编译器,这会给你更新工具
  • 根据您的要求将您的脚本编译为字节码或本机代码,编译后的代码在平台内便携并且速度很快

一旦你知道如何指定组件,编译对于ocaml程序来说相当简单。

附注:有一个名为ocamlscript的opam软件包,它为您的软件包和依赖关系提供了一种特定的语法,但是它将脚本透明地编译到磁盘。也许这是你想要的 - 但需要全局安装opam。