代码:
let size = 10
let getTbl = Array.init size ~f:(fun _ -> Avltree.empty )
end
错误:
Error: The type of this module,
sig val size : int val getTbl : ('_weak1, '_weak2) Avltree.t array end,
contains type variables that cannot be generalized
如何让Ocaml编译器知道我计划将键和值都存储为整数?
尝试了几种不同的方法-没有一种有效。
答案 0 :(得分:2)
弱类型变量表示尚未推断出的类型,通常是因为您已经定义了程序变量并且从未使用过它,因此类型检查器不知道此变量包含什么内容。通常,这很好,因为变量的首次使用将定义其类型。但是,由于OCaml中的整个类型检查例程受编译单元(即文件)的范围限制,因此应在编译文件之前定义此类变量。
因此,您必须(1)使用变量,(2)将其约束为某种类型,例如,实现(.ml)文件中的(let getTbl : (int, int) Avltree.t array) ..
,或{{1 }}文件。您甚至可以只创建一个空的mli
文件(与.ml文件同名),这将自动隐藏模块中定义的所有变量并启用编译功能。
答案 1 :(得分:1)
将Avltree.empty
更改为(Avltree.empty : (int, int) Avltree.t)