假设我有两个.ml
个文件:A.ml
和B.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
类型。
我该怎么办?
答案 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
(但是你必须清理你的代码目录)