dictionary - 查看字符串映射中是否存在键

标签 dictionary ocaml

我目前正在使用 Map 仿函数创建一个字符串映射:module StringMap = Map.Make(String)

然后我尝试将一组字符串映射插入到 StringMap 中的 'a 对象列表。为了检查 key 是否已经存在,我正在执行以下操作:

match StringMap.find_opt key my_map with
  | None -> StringMap.add key [child] my_map
  | Some l -> StringMap.add key (child::l) my_map 

但是,当我编译时,我收到一条错误消息,指出 find_opt 的绑定(bind)具有未绑定(bind)的值,即使它已在签名中定义:https://ocaml.org/learn/tutorials/map.html .

我也尝试过使用 StringMap.mem key my_map,但出现以下错误:

Error: This expression has type string but an expression was expected of type
     'a StringMap.t =
       (StringMap.Key.t, 'a, StringMap.Key.comparator_witness)
       Base__Map.t

我环顾四周,看看是否有打字错误或其他问题,但一直找不到任何东西。关于为什么我会收到这些错误中的任何一个的任何想法?

最佳答案

根据错误消息,您正在使用基础(或核心)库,它们是 OCaml 标准库的替代品,并且具有不同的接口(interface)。特别是Map接口(interface)中的find函数已经返回了一个option类型,所以没有find_opt函数。

也许,您已经使用了 jbuilder 教程中的一些示例来自动启用该库。

您可以切换到标准库或通过打开兼容模块 Caml 启用与普通 OCaml 标准库的兼容性,例如,

open Caml

(* your code goes below *)

关于dictionary - 查看字符串映射中是否存在键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50241252/

相关文章:

C#:从字典中删除重复值?

android - 完全困惑试图整合 map ......最好的前进方式?

algorithm - 将数字添加到函数 OCaml 中的列表

list - List.rev 行为奇怪吗?

java - 有两个键的 map

C++ 如何访问和更改映射中对象的成员数据?

python - 如何检查 python 列表/字典中是否存在第二层(嵌套)键?

recursion - OCaml 递归函数

functional-programming - OCaml 中嵌套 `let .. in ..` 的评估范围/顺序

ocaml - 如何从 mli 文件自动生成 stub ?