查看String Map中是否存在键

时间:2018-05-08 19:46:30

标签: dictionary ocaml

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

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

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的绑定具有未绑定的值,即使它在签名中定义: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

我环顾四周看是否有输入错误或其他东西,但一直无法找到任何东西。关于我为什么会遇到这些错误的任何想法?

1 个答案:

答案 0 :(得分:5)

根据您使用Base(或Core)库的错误消息,它们是OCaml标准库的替换,并具有不同的接口。特别是,find接口中的Map函数已经返回了一个选项类型,因此没有find_opt函数。

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

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

open Caml

(* your code goes below *)