0

假设我有两个.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_typefrom的类型A

我该怎么办?

4

2 回答 2

6

值得注意的是,您可以只使用A.id_aryin B.ml。使用open是避免重复的方便A.。然而,open这也是一件相当激烈的事情,因为它合并了两个命名空间。我个人尽量避免open在我的项目中使用除了一些非常基本的模块。

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

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

这些都不那么激烈,我更喜欢它们而不是全局open.

于 2013-02-07T21:21:44.250 回答
1

添加open A到 B.ml 的开头

也只是提醒一下,使用以下方法构建代码会更方便:(ocamlbuild B.native 但是,您必须清理代码目录)

于 2013-02-07T21:07:11.763 回答