Dictionary 在OCaml中使用Map.update
我试图更改我在OCaml中创建的映射中的键的值: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
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
谢谢!我没有意识到地图。添加更新的现有地图条目!