我正在尝试更改我在 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
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/