我有4个文件:
A.mli A.ml B.mli B.ml
使用ocamlc -c
我已编译A.mli
然后A.ml
然后B.mli
而没有错误
如何在A
B.ml
在文件B.ml的开头,我有
#load "A.cmo"
并且此行无法使用ocamlc -c
我应该如何在我的代码中加载模块(编译代码)?
答案 0 :(得分:2)
#load
命令仅适用于顶层(OCaml REPL)。
要使用A.ml
中B.ml
的代码,您只需在A.
的代码中使用B.ml
作为前缀。编译器将找到A.mli
的编译版本,并将知道该怎么做。
稍后您需要将所有文件链接在一起以生成可执行文件。您需要按依赖顺序列出它们(模块出现在依赖它的其他模块之前)。
这是一个小例子:
$ head a.mli a.ml b.mli b.ml main.ml
==> a.mli <==
val f : int -> int
==> a.ml <==
let f x = x + 10
==> b.mli <==
val g : int -> int
==> b.ml <==
let g x = A.f (x * 10)
==> main.ml <==
let main () = Printf.printf "%d\n" (B.g 12)
let () = main ()
$ ocamlc -c a.mli a.ml b.mli b.ml main.ml
$ ocamlc -o main a.cmo b.cmo main.cmo
$ ./main
130
(有些工具可以自动完成大部分工作,这使得OCaml开发变得不那么繁琐。但这应该显示出基本的想法。)