[英]Is there *any* difference between map.updated(k,v) and map + (k,v)? I'm getting a compile error on one but not the other
I'm new (about a month) to Scala. 我是Scala的新手(大约一个月)。 I just came across a type-check error that I can't figure out 我刚遇到类型检查错误,我无法弄清楚
This snippet works as expected. 此代码片段按预期方式工作。
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)
}
This snippet gives a type mismatch error on 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)
^
Now, the docs on map say that ms updated (k,v)
is equivalent to ms + (k->v)
but that appears to not be the case. 现在, 地图上的文档说, ms updated (k,v)
等同于ms + (k->v)
但事实并非如此。
Here's my setup: 这是我的设置:
SBT version 0.13.8
Scala version 2.11.8
Java SDK 1.8
IntlliJ IDEa
key -> m.getOrElse(key, 0) + value
means, (key->m.getOrElse(key, 0)) + value
. key -> m.getOrElse(key, 0) + value
表示(key->m.getOrElse(key, 0)) + value
。 So, effectively, you are trying to add an Int
to a tuple, no surprise, that does not work. 因此,有效地,您正在尝试将Int
添加到元组,这并不奇怪,这是行不通的。
Try using parentheses: m + (key -> (m.getOrElse(key, 0) + value))
尝试使用括号: m + (key -> (m.getOrElse(key, 0) + value))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.