如何在OCaml中创建colormap类型的引用?
OCaml类型不匹配问题:创建colormap类型的引用
你遇到的问题核心是类型推断的默认行为:NodeMap.empty本身是多态的(类型为'a NodeMap.t),但当你把它赋值给res_map时,OCaml会根据上下文尝试确定具体类型。由于你的代码里没有对res_map做写入操作,编译器默认将其推断为RegSet.elt NodeMap.t ref,而非你需要的colormap ref(即RegSet.elt option NodeMap.t ref)。
解决方法很简单,通过类型注解明确初始空映射的类型即可:
module NodeMap = Map.Make(Cfg.IGraphNode) type colormap = ((RegSet.elt option) NodeMap.t) let my_func (ig : graph) : colormap = let res_map = ref (NodeMap.empty : colormap) in !res_map
也可以直接给res_map变量添加类型注解:
module NodeMap = Map.Make(Cfg.IGraphNode) type colormap = ((RegSet.elt option) NodeMap.t) let my_func (ig : graph) : colormap = let res_map : colormap ref = ref NodeMap.empty in !res_map
两种方式都能让编译器明确res_map引用的是colormap类型的映射,从而解决类型不匹配的问题。
内容的提问来源于stack exchange,提问作者RBB
相关产品推荐
相关产品推荐

