OCaml顶层模块加载

13

我正在尝试将我的.cmo模块加载到toplevel中,我已经尝试了:

$ ocaml mymodule.cmo
我得到了顶级提示,但我无法引用Mymodule。
我还尝试了。
#load "mymodule.cmo"

它没有抱怨,但仍然无法引用 Mymodule。

我也尝试过

#use "mymodule.ml"

这个方法似乎可以工作,但它没有将代码加载到"Mymodule"名称空间中。这是一个问题,因为我实际上想要加载一些模块到顶层,并且它们通过它们的模块命名空间相互引用。


1
啊,我发现我的问题是由于cmo文件在子目录中,-- ocaml lib/mymodule.cmo。我必须使用-- ocaml -I lib mymodule.cmo才能引用它。 - romerun
1
很棒,你让事情运转起来了。你说当你执行 #load "mymodule.cmo" 时没有出现任何投诉。但是如果顶层无法找到你指定的模块,它将会抱怨。也许在不同的点上有一些问题出现了。祝好! - Jeffrey Scofield
1个回答

19

你完成操作后

#load "mymodule.cmo"

你可以引用你的模块,但你仍然需要使用模块名称:

Mymodule.x

如果您想使用一个简单的名称(x),则还需要open该模块:

open Mymodule

这可能是您问题的源头。

以下是一个会话示例,展示了我所说的内容:

$ cat mymodule.ml
let x = 14
$ ocaml312
        Objective Caml version 3.12.0
# load "mymodule.cmo";;
# x;;
Characters 0-1:
  x
  ^
Error: Unbound value x
# Mymodule.x;;
- : int = 14
# open Mymodule;;
# x;;
- : int = 14
# 

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