我目前正在使用 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/