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

Jac*_*ale 0 ocaml functional-programming

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


A.ml,我有

type my_type = {id_ary : int array; sz_ary : int array};;
Run Code Online (Sandbox Code Playgroud)

B.ml,我有

let test_my_type {id_ary;_} = id_ary.(0) <- 10;;
Run Code Online (Sandbox Code Playgroud)

然后我像这样编译它们

ocamlc -linkpkg A.ml B.ml -o C
Run Code Online (Sandbox Code Playgroud)

但编译器给出了这样的错误: Error: Unbound record field label id_ary

似乎B无法使用my_type来自的类型A.

我该怎么办?

Jef*_*eld 6

值得一提的是,你可以只使用A.id_aryB.ml.使用open是避免重复的便利A..但是,open由于它合并了两个名称空间,因此也是一件相当激烈的事情.我个人试图避免使用open除了我的项目中的一些非常基本的模块.

最近的OCaml版本具有两个符号的"本地化"打开:

# String.(length "abc");;
- : int = 3
# let open String in length "abc";;
- : int = 3
Run Code Online (Sandbox Code Playgroud)

这些都不那么激烈了,我宁愿他们走向全球化open.