【问题标题】:Use several modules in OCaml utop在 OCaml utop 中使用多个模块
【发布时间】:2014-01-01 23:22:02
【问题描述】:

我最近正在阅读一个 OCaml 项目,我想将源文件放在 utop 中,以便我可以做一些实验。
假设我有两个文件 amodule.mlbmodule.ml
bmodule.ml 将使用 amodule.ml 中定义的函数,例如 bmodule 使用 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
  • 是的。但是还是不行。
  • 你说它不起作用是什么意思?你能发布截图或完整的 utop 文本吗?

标签: ocaml ocamlbuild ocamlfind


【解决方案1】:

#use a.ml 执行 a.ml 中的每个语句,就像您直接在顶层键入这些语句一样。因此,您没有定义module A,因此您的其他文件不能包含A.foo 之类的内容。如果你想要module A,你必须先字节编译a.ml,然后#load a.cmo

【讨论】:

  • 较新版本的 OCaml 支持 #use_mod 这应该允许在没有事先编译的情况下这样做。
  • @hcarty 提到的指令实际上是#mod_use,确实很方便。 :)
  • #mod_use 正是我所缺少的拼图。谢谢@ShonFeder!我不敢相信 Real World OCaml 一次都没提过。
  • 任何人都想通过将#mod_use 转换为适当的 StackOverflow 答案来获得一些快速的因果报应?
  • 谢谢@hcarty! #mod_use 正是我一直在寻找的几个小时,它满足了一个非常基本的需求。令人难以置信的是,在 OCaml 的流行介绍中没有提到它。
猜你喜欢
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2015-07-13
  • 1970-01-01
相关资源
最近更新 更多