dictionary - 在 OCaml 中使用 Map.update

我正在尝试更改我在 OCaml 中制作的 map 中的键值:

module TestMap = Map.Make(String);;
let m = TestMap.empty;;
let m = TestMap.add "Chris" 1 m ;;
let m = TestMap.add "Julie" 4 m;;

这会编译文件,但是当我尝试更新键 Julie 处的值时和:
let m = TestMap.update "Julie" 10 m;;

我从编译器收到一个错误:
Error: This expression has type int but an expression was expected of type
         'a option -> 'a option

我猜我可能错误地使用了该功能。我发现 Map.update 的文档很难理解:
val update : key -> ('a option -> 'a option) -> 'a t -> 'a t

是我的语法还是我的参数不正确?

最佳答案

更新功能的工作方式与您的想法不同

key -> ('a option -> 'a option) -> 'a t -> 'a t

你会看到第二个参数是一个接受 'a option 的函数。并返回 'a option所以你不直接用新值更新,而是根据前一个传递一个返回新值的函数,例如:
let m = TestMap.update "Julie" (fun _ -> Some 10) m;;

这是因为,正如文档所述,通过的 'a option告诉您是否存在键和返回的 'a option 的映射。允许您更改它甚至删除它(通过 None )。

如果您只需要更新映射,您可以使用 Map.add同样,没有必要使用更高级的 Map.update .

https://stackoverflow.com/questions/52528430/

相关文章:

deployment - 如何在 Kubernetes 中相同部署的两个 Pod 中使环境变量不同?

janusgraph - 如何在 Janusgraph 中获取索引键列表?

prolog - '/1' 在 Prolog 中代表什么?

shell - 画一棵圣诞树

logistic-regression - 为什么在这个逻辑回归示例中 Pymc3 ADVI 比 M

scala - 如何在 Scala 中实现 Python 的 issuperset()

github - 如何从 GitHub 评论为我的拉取请求触发 Travis 重建?

python-3.x - pyspark中的异常值检测

elm - HTML 可选属性

excel - 想知道是否可能