首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ocaml没有按预期加载.cma

ocaml没有按预期加载.cma
EN

Stack Overflow用户
提问于 2017-05-01 02:52:03
回答 2查看 401关注 0票数 1

我想做以下几件事

  1. 一个库的工作分散在几个ocaml模块中
  2. 编译库
  3. 将其加载到REPL中,以试验公共API。

为了完成1和2,我使用jbuilder和一个opam文件。现在,所有这些都可以轻松编译我的库,但是我在repl中测试它时遇到了困难。

我目前的方法是旋转一个repl并使用#load "_build/default/<name-of-main-library-module>.cma。这是成功的执行,因为我已经#require编辑了我的依赖项。然而,这似乎并没有真正影响repl中的绑定集。MainLibraryModule既没有绑定为模块,也没有引入公共API不受模块名称的限制。

我在这里做了什么明显的错误吗?我应该如何加载这个cma文件,这样我就可以使用我的库了。如果有一种更好的方法来完成任务3(而不以任何方式修改全局状态),我也对此持开放态度。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-01 06:47:46

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

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

在您的示例中,需要在#directory指令之前添加此指令#load

代码语言:javascript
复制
#directory "build/path_to_cmis";;
#load "build/path_to_cma";;
票数 2
EN

Stack Overflow用户

发布于 2017-05-01 03:39:22

使用#load时,加载模块的顶级名称不会作为REPL的顶级名称引入。要获得这种效果,您需要open模块。

代码语言:javascript
复制
# #load "unix.cma";;
# stat;;
Error: Unbound value stat
# Unix.stat;;
- : string -> Unix.stats = <fun>
# open Unix;;
# stat;;
- : string -> Unix.stats = <fun>

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43713654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档