我想做以下几件事
为了完成1和2,我使用jbuilder和一个opam文件。现在,所有这些都可以轻松编译我的库,但是我在repl中测试它时遇到了困难。
我目前的方法是旋转一个repl并使用#load "_build/default/<name-of-main-library-module>.cma。这是成功的执行,因为我已经#require编辑了我的依赖项。然而,这似乎并没有真正影响repl中的绑定集。MainLibraryModule既没有绑定为模块,也没有引入公共API不受模块名称的限制。
我在这里做了什么明显的错误吗?我应该如何加载这个cma文件,这样我就可以使用我的库了。如果有一种更好的方法来完成任务3(而不以任何方式修改全局状态),我也对此持开放态度。
发布于 2017-05-01 06:47:46
为了使用在.cma文件中定义的模块,REPL需要能够找到相应的.cmi文件,这些文件是库中模块的编译接口文件。
这是#directory <path_to_cmis>;;指令的用例,它将目录<path_to_cmis>添加到可能包含cmi文件的目录列表中。
在您的示例中,需要在#directory指令之前添加此指令#load:
#directory "build/path_to_cmis";;
#load "build/path_to_cma";;发布于 2017-05-01 03:39:22
使用#load时,加载模块的顶级名称不会作为REPL的顶级名称引入。要获得这种效果,您需要open模块。
# #load "unix.cma";;
# stat;;
Error: Unbound value stat
# Unix.stat;;
- : string -> Unix.stats = <fun>
# open Unix;;
# stat;;
- : string -> Unix.stats = <fun>如何检查模块名称的绑定?
https://stackoverflow.com/questions/43713654
复制相似问题