如何在 OCaml 中创建地图引用

问题描述 投票:0回答:1

我是 OCaml 的新手,OCaml 中的类型真的让我感到困惑,在下面的代码中,当我尝试使用 colormap 类型的 ref 时,我得到一个编译错误,说 res_map 的类型是“RegSet.elt Map。 Make(Cfg.IGraphNode).t”但颜色映射是“RegSet.elt 选项 Map.Make(Cfg.IGraphNode).t”类型,在我看来,不同之处在于我创建了一个具有“键 - > value”类型,但 colormap 是一个具有“key -> value option”类型的映射。我怎样才能制作颜色图的参考?

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 in
    !res_map (*compile error here, type mismatch with colormap*)
ocaml
1个回答
0
投票

很难尝试你的代码,因为它不是独立的。假设我添加了以下定义:

module Cfg = struct module IGraphNode = String end
module RegSet = struct type elt = int end
type graph = float

然后你的代码编译没有错误。

一般来说,引用某物的方法就像你所做的那样:

ref value
。当然你的代码有点荒谬,因为它之后没有使用任何引用,它只是取消引用它并返回引用的值(所以引用本身会消失)。但我认为这是因为它只是一个例子。

无论如何,我怀疑问题不是你想的那样。如果您发布一个显示问题的独立示例,它将更容易提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.