【问题标题】:(Ocaml) unbound module error on visual code(Ocaml)可视代码上的未绑定模块错误
【发布时间】:2019-11-20 00:51:51
【问题描述】:

我刚刚开始学习 Ocaml。 我在 Ubuntu 上使用可视代码作为我的 IDE, 我已经安装了 OCaml 扩展和 merlin。

我有以下问题-

我的工作区文件夹仅包含 2 个文件: a.ml 和 b.ml。

在 a.ml 文件中,我定义了一个名为“COOL”的模块,在 b.ml 文件中我写道:

~ b.ml ~

open COOL;;

我收到一条错误消息,提示“未绑定模块 COOL merlin”

有没有办法让它看到文件 a.ml 中的模块? 我尝试寻找解决方案,我看到了 makefile 和 .merlin 和 B build 但我不明白,除了我提到的 2 个文件,我什么都没有。 如果有人能告诉我应该怎么做才能让这个小例子起作用,我会很高兴。

【问题讨论】:

  • 在 OCaml 中,每个文件都是一个模块,模块名称来源于文件名的大写。因此,a.ml 的内容将可以通过模块A 访问,这意味着您可以使用open A.COOL 打开您的模块。
  • 这真的很烦人,但基本上如果您不能/不构建文件,那么您将无法访问“转到定义”。

标签: ocaml merlin


【解决方案1】:

tl;博士:执行ocamlc -c a.ml(或任何您的编译命令)以生成a.cmi 文件,merlin 将使用该文件来获取模块A 中定义的符号列表。

除了 glennsl 提到的 b.ml 中你的模块确实被命名为 A.COOL(除非你 open Aopen COOL 之前),据我所知,关键是 merlin 是,只观看正在编辑的当前文件,即b.ml 在您的情况下。为了能够访问外部符号,您需要编译其他文件(或者至少编译它们对应的.mli,如果它们存在的话),以使相关的.cmi 文件可供merlin 使用。

这在描述构建路径的文档的paragraph 中是隐含的,它说“[merlin] 需要知道在哪里可以找到项目其他模块的 cmi 文件”,即这些文件需要存在于第一名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 2012-11-21
    • 2020-04-18
    • 1970-01-01
    • 2020-07-24
    • 2013-08-28
    • 2012-09-18
    • 2016-01-16
    相关资源
    最近更新 更多