【发布时间】:2014-03-01 01:08:56
【问题描述】:
我在 OCaml 中有以下代码会产生错误“未绑定类型构造函数变量”:
module OrderedVar = struct
type t = variable
let compare v1 v2 = v1#get_name - v2#get_name
end
module VarSet = Set.Make(OrderedVar)
class variable n =
object
val mutable name = n
method get_name = name
end
如何声明类型“变量”?
谢谢
编辑:
感谢您的回答,但我的问题有点困难。事实上,我有两个模块和两个“交错”的类。在这里,我不能在模块之前声明类“变量”和“子句”,因为它们需要模块:
module OrderedVar = struct
type t = variable
let compare v1 v2 = v1#get_name - v2#get_name
end
module VarSet = Set.Make(OrderedVar)
module OrderedClause = struct
type t = clause
let compare = compare
end
module ClauseSet = Set.Make(OrderedClause)
class variable n =
object
val mutable name = n
val mutable cpos = ClauseSet.empty
method get_name = name
end
class clause =
object
val mutable vpos = VarSet.empty
end
【问题讨论】:
-
递归模块的文档应该可以帮助您确定如何正确实现这些模块。 caml.inria.fr/pub/docs/manual-ocaml-400/manual021.html#toc75 虽然您可能想重新考虑设计以尽量避免这种情况。这个例子读起来可能会轻松一些。 ocaml.janestreet.com/?q=node/84 Essential 你要使用和关键字在同一个声明中声明两个模块。
标签: class object types module ocaml