Scala - 如何按功能返回Map值?

时间:2015-07-18 10:51:04

标签: scala

为什么下面的函数在scala中不起作用?

def getUpdatedMap(keywords: String, m: Map[String, String]) : Map[String, String] = {
  m += (keywords -> "abcde")
}
  

编译错误:   value + =不是Map [String,String]

的成员

我在Scala中很新,我忘记定义或遗失的任何东西? 感谢。

4 个答案:

答案 0 :(得分:7)

您会混淆immutable Mapmutable 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")