为什么下面的函数在scala中不起作用?
def getUpdatedMap(keywords: String, m: Map[String, String]) : Map[String, String] = {
m += (keywords -> "abcde")
}
编译错误: value + =不是Map [String,String]
的成员
我在Scala中很新,我忘记定义或遗失的任何东西? 感谢。
答案 0 :(得分:7)
您会混淆immutable Map
和mutable Map
。
std::string a = ""; // equivalent to std::string a;
答案 1 :(得分:7)
你完全没有遗漏任何东西。正如编译器所说,float
只是没有Map
方法。查看the API docs。
我认为您想要的方法是+=
。
+
向此地图添加键/值对,返回新地图。
def +[B1 >: B](kv: (A, B1)): Map[A, B1]
答案 2 :(得分:1)
正如其他人所说,不可变Map
没有+=
方法。只是想补充一点,也许你把它与编译器的var
s:
scala> var a = Map(1 -> 1)
a: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1)
scala> a += 2 -> 2
scala> a
res2: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2)
此+=
快捷方式与a = a + 2 -> 2
相同,因此它不会对输入参数等不可变值起作用:
scala> def getMutated(m: Map[Int, Int]) = {m = m + (1 -> 1)}
<console>:7: error: reassignment to val
def getMutated(m: Map[Int, Int]) = {m = m + (1 -> 1)}
^
你可以在你的函数中声明var
,但最好和最简单的方法是使用+
,就像别人说的那样。
答案 3 :(得分:0)
它正是它所说的:您在+=
上调用方法m
,这是一个Map
,但Map
没有有一个+=
方法。
我不太清楚你想要在这里实现什么,从它的外观来看,这似乎是你想要的:
def getUpdatedMap(keywords: String, m: Map[String, String]) =
m + (keywords -> "abcde")