如何在OCaml中使用另一个.ml文件中定义的类型?

时间:2013-02-07 20:48:37

标签: functional-programming ocaml

假设我有两个.ml个文件:A.mlB.ml


A.ml,我有

type my_type = {id_ary : int array; sz_ary : int array};;

B.ml,我有

let test_my_type {id_ary;_} = id_ary.(0) <- 10;;

然后我像这样编译它们

ocamlc -linkpkg A.ml B.ml -o C

但是编译器会出现这样的错误:Error: Unbound record field label id_ary

似乎B无法使用my_type中的A类型。

我该怎么办?

2 个答案:

答案 0 :(得分:6)

值得注意的是,您可以在A.id_ary中使用B.ml。使用open可以避免重复A.。但是,open也是一个相当激烈的事情,因为它合并了两个名称空间。我个人试图避免使用open,除了我项目中的一些非常基本的模块。

最近的OCaml版本有一个“本地化”打开,带有两个符号:

# String.(length "abc");;
- : int = 3
# let open String in length "abc";;
- : int = 3

这些不那么激烈,我更喜欢全球open

答案 1 :(得分:1)

open A添加到B.ml

的开头

另外,只需预测,使用以下代码构建代码会更方便:ocamlbuild B.native (但是你必须清理你的代码目录)