在a.ml中,定义记录类型t,并且也在a.mli中透明地定义,即在d接口中,以便类型定义可用于所有其他文件.
a.ml还有一个函数func,它返回一个t列表.
现在在另一个文件中,b.ml即可调用func,现在很明显ocaml编译器wud nt能够推断存储在d列表中的d类型的对象,对于编译器来说它只是一个列表.所以在b.ml中,我喜欢dis,
let tlist = A.func in
let vart = List.hd tlist in
printf "%s\n" vart.name (*name is a field in record t*)
Run Code Online (Sandbox Code Playgroud)
现在我在这里得到一个编译器错误,说"未绑定记录字段标签名称",这是有道理的,因为编译器无法推断d类型的镖.
我的第一个问题:如何在这里明确提供d型镖?我试着做"让vart:At ="但是得到了同样的错误.
我还尝试创建另一个函数来获取d列表的第一个元素并将返回类型提到At,但后来我得到了"Unbound value At".我这样做了:
let firstt = function
[] -> 0
| x :: _ -> A.t x ;;
Run Code Online (Sandbox Code Playgroud)
问题是编译器无法识别b.ml中的At(a type)但是能够识别函数A.func.如果我从b.ml中删除At,我不会遇到任何编译器错误.
ocaml ×1