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

Mic*_*ono 3 f# functional-programming

我想创建一个地图和一个函数来添加项目到该地图.

这就是我做的

let mymap = Map.empty

let myfunc nId nValue = 
    mymap = Map.add nId nValue ;;
Run Code Online (Sandbox Code Playgroud)

但这产生了以下错误
This expression was expected to have type Map<'a,'b> but here has type Map<'c,'d> -> Map<'c,'d>

我做错了什么?

Joh*_*mer 8

地图是不可变的,所以你需要这样做let mutable mymap.

此外,=做比较,你需要<-分配,这就是你得到错误的原因.

就像是

let mutable mymap = Map.empty

let myfunc nId nValue = 
    mymap <- Map.add nId nValue mymap;;
Run Code Online (Sandbox Code Playgroud)

是你想要的


rex*_*ghk 6

除了mymap像约翰的答案中那样分配新值,你可以使用更惯用的FP方式:

let mymap = Map.empty

let myfunc nId nValue = 
    Map.add nId nValue mymap
Run Code Online (Sandbox Code Playgroud)

John的myfunc签名'a -> 'b -> unit因为赋值,我有一个签名'a -> 'b -> Map<'a, 'b>,在FP中更常见的是返回一个新的Map而不是修改现有的map(mymap).