在OCaml utop中使用多个模块

11

最近我在阅读一个OCaml项目,想把源文件放到utop中进行一些实验。假设我有两个文件amodule.mlbmodule.ml
bmodule.ml将使用在amodule.ml中定义的函数,例如,在bmodule.ml中使用Amodule.anyfunction(),其中anyfunction()amodule.ml中定义。
我想把它们都放到utop中:

#directory "/directory contain amodule.ml and bmodule.ml"
#use "amodule.ml"
#use "bmodule.ml"

这样不起作用是因为Amodule是基于amodule.ml文件的模块名称,而utop并不知道这些内容,我想。
那么我如何在不更改文件内容的情况下将这些文件放入utop中?


你尝试过使用cd命令进入存放amodule.ml和bmodule.ml的文件夹,然后在该文件夹中输入utop吗? - Jackson Tale
是的。但它仍然不起作用。 - KUN
你的意思是它不工作吗?你能发布一张截图或完整的Utop文本吗? - Jackson Tale
1个回答

14

#use a.ml 执行a.ml中的每个语句,就好像你直接在toplevel中输入了那些语句。因此,你不会得到一个定义好的module A,所以你的其他文件不能有类似A.foo的内容。如果你想要module A,你必须先对a.ml进行字节编译,然后使用#load a.cmo


7
OCaml的新版本支持#use_mod,可以在不进行先前编译的情况下实现此操作。 - hcarty
11
@hcarty提到的指令实际上是#mod_use,它确实非常方便。 :) - Shon
6
“#mod_use”恰好是我所缺少的那个拼图。谢谢@ShonFeder!我简直不敢相信《Real World OCaml》甚至没有提到它一次。” - Tobia
1
有人想通过将#mod_use转换为适当的StackOverflow答案来获得一些快速的karma吗? - DomQ
谢谢 @hcarty!#mod_use 正是我苦苦寻找了几个小时的东西,它满足了一个非常基本的需求。令人难以置信的是,在流行的 OCaml 入门教程中竟然没有提到它。 - user0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接