2011-12-18 39 views
12

我想在.cmo加载模块,我到顶层,我曾尝试:OCaml的顶层模块加载

$ ocaml mymodule.cmo 

我得到了顶级的提示,但我不能指Mymodule中

我也试过

#load "mymodule.cmo" 

它没有抱怨,但还是不能指Mymodule中

我也试过

#use "mymodule.ml" 

这似乎是工作,但它不会代码加载到Mymodule中的命名空间,因为其实我是想加载几个模块到最高水平,这是一个问题,他们通过指对方自己模块名称空间。

+1

啊,我想通了,我的问题的原因是CMO文件在子目录 - ocaml的LIB/mymodule.cmo。我不得不使用-ocaml -I lib mymodule.cmo来引用它。 – romerun 2011-12-18 19:59:30

+1

这很棒,你有事情的工作。你说过你在'#load'mymodule.cmo''的时候没有抱怨。但是,如果顶层*找不到你指定的模块,它将会投诉。也许有些事情在不同的地方出错了。问候, – 2011-12-19 01:57:00

回答

15

后你做

#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 
#