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>
我做错了什么?
地图是不可变的,所以你需要这样做let mutable mymap.
此外,=做比较,你需要<-分配,这就是你得到错误的原因.
就像是
let mutable mymap = Map.empty
let myfunc nId nValue =
mymap <- Map.add nId nValue mymap;;
Run Code Online (Sandbox Code Playgroud)
是你想要的
除了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).