我想创建一个地图和一个将项目添加到该地图的功能。
这就是我做的事情
let mymap = Map.empty
let myfunc nId nValue =
mymap = Map.add nId nValue ;;
但这产生了以下错误
This expression was expected to have type Map<'a,'b> but here has type Map<'c,'d> -> Map<'c,'d>
我做错了什么?
答案 0 :(得分:8)
地图是不可变的,因此您需要执行let mutable mymap
。
此外,=
进行比较,您需要<-
进行分配,这就是您收到错误的原因。
像
这样的东西let mutable mymap = Map.empty
let myfunc nId nValue =
mymap <- Map.add nId nValue mymap;;
是你想要的
答案 1 :(得分:6)
除了像John的回答中那样将mymap
分配给新值之外,您可以使用更惯用的FP方式来实现:
let mymap = Map.empty
let myfunc nId nValue =
Map.add nId nValue mymap
John myfunc
因签名而有'a -> 'b -> unit
签名,我的签名为'a -> 'b -> Map<'a, 'b>
,在FP中更常见,以返回新的Map
而不是修改现有地图(mymap
)。