Dictionary 在OCaml中使用Map.update

Dictionary 在OCaml中使用Map.update,dictionary,ocaml,Dictionary,Ocaml,我试图更改我在OCaml中创建的映射中的键的值: 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: Thi

我试图更改我在OCaml中创建的映射中的键的值:

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选项
,并返回一个
'a选项
,因此您不会直接使用新值进行更新,而是根据前一个参数传递一个返回新值的函数,例如:

let m = TestMap.update "Julie" (fun _ -> Some 10) m;;
这是因为,如文档所述,传递的
'a选项
告诉您是否存在密钥映射,而返回的
'a选项
允许您更改甚至删除它(通过


如果只需要更新映射,您可以再次使用
Map.add
,无需使用更高级的
Map.update

谢谢!我没有意识到
地图。添加
更新的现有地图条目!