F#将新项添加到Collections.Map?

时间:2016-03-28 23:53:29

标签: f# functional-programming

我想创建一个地图和一个将项目添加到该地图的功能。

这就是我做的事情

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>

我做错了什么?

2 个答案:

答案 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)。