ocaml未按预期加载.cma

时间:2017-05-01 02:52:04

标签: ocaml

我试图做以下事情

  1. 在几个ocaml模块中展开图书馆
  2. 编译库
  3. 将其加载到REPL中以试验公共API
  4. 为了做1和2,我将jbuilder与opam文件一起使用。现在所有这些都非常适合轻松编译我的库,但是我在repl中测试它时遇到了麻烦。

    我目前的方法是启动一个repl并使用#load "_build/default/<name-of-main-library-module>.cma。这已成功执行,因为我已经#require编辑了我的依赖项。但是,这实际上似乎不会影响repl中的绑定集。 MainLibraryModule既不作为模块绑定,也不会引入模块名称不合格的公共API。

    我在这里做了一些明显错误的事情,我应该如何加载这个cma文件,以便我可以使用我的库。如果有一个更好的方法来完成任务3(不以任何方式修改全局状态),我也可以这样做。

2 个答案:

答案 0 :(得分:2)

为了使用.cma文件中定义的模块,REPL需要能够找到相应的.cmi文件,这些文件是库中模块的编译接口文件。

这是#directory <path_to_cmis>;;指令的用例,它将目录<path_to_cmis>添加到可能包含cmi文件的目录列表中。

在您的情况下,您需要在之前添加此指令#directory #load指令:

#directory "build/path_to_cmis";;
#load "build/path_to_cma";;

答案 1 :(得分:1)

使用res.render('pages/success', {holedata: [] });时,加载模块的顶级名称不会作为REPL的顶级名称引入。要获得此效果,您需要#load模块。

open

您是如何检查模块名称的绑定的?