map.updated(k,v)和map +(k,v)之间是否存在* *差异?我在一个而不是另一个上遇到编译错误

时间:2016-07-13 15:36:10

标签: scala

我是Scala的新人(大约一个月)。我刚刚遇到了一个类型检查错误,我无法弄清楚

此代码段按预期工作。

  def combine(m: Map[Char, Int], tup: (Char, Int)): Map[Char,Int] = tup match {
    case (key: Char, value: Int) => m updated (key, m.getOrElse(key, 0) + value)
  }

此代码段在value

上提供了类型不匹配错误
  def combine(m: Map[Char, Int], tup: (Char, Int)): Map[Char,Int] = tup match {
    case (key: Char, value: Int) => m + (key -> m.getOrElse(key, 0) + value)
  }

 found   : Int
 required: String
           case (key: Char, value: Int) => m + (key -> m.getOrElse(key, 0) + value)
                                                                             ^

现在,docs on map表示ms updated (k,v)相当于ms + (k->v),但似乎并非如此。

这是我的设置:

SBT version 0.13.8
Scala version 2.11.8
Java SDK 1.8
IntlliJ IDEa

1 个答案:

答案 0 :(得分:2)

key -> m.getOrElse(key, 0) + value表示(key->m.getOrElse(key, 0)) + value。所以,实际上,你试图将Int添加到一个元组,毫不奇怪,这是行不通的。

尝试使用括号:m + (key -> (m.getOrElse(key, 0) + value))