我在Scala中遇到类型不匹配的问题。编译器返回错误:
错误:类型不匹配;找到:需要Int:字符串val v3:Int =(v1 + v2)
这是我的功能的代码:
def sumMaps[T, Int](m1: Map[T, Int], m2: Map[T, Int]): Map[T, Int] = {
val sameKeys = m1.keySet.intersect(m2.keySet)
var m3: Map[T, Int] = m1 ++ m2
for (key <- sameKeys) {
val v1:Int = m1(key)
val v2:Int = m2(key)
val v3:Int = (v1+v2)
//val v:Int = (m1(key) + m2(key))
m3 = m3 updated (key, v3)
}
m3
}
为什么?知道可能是什么问题吗?
Int
当它是具体类型时,您要重新声明为类型参数。
您应该将方法标题更改为:
def sumMaps[T](m1: Map[T, Int], m2: Map[T, Int]): Map[T, Int] = {
当Int
是类型参数时,编译器将其替换(v1+v2)
为字符串加法,因此变为(v1.toString + v2.toString)
,这给您带来了问题。
更新
我想出了一个更简单的解决方案来解决您的问题:
def sumMaps[T](m1: Map[T, Int], m2: Map[T, Int]): Map[T, Int] = {
(for (key <- m1.keySet ++ m2.keySet) yield {
val v1: Int = m1.getOrElse(key, 0)
val v2: Int = m2.getOrElse(key, 0)
key -> (v1 + v2)
}).toMap
}
或更简单的一个:
def sumMaps[T](m1: Map[T, Int], m2: Map[T, Int]): Map[T, Int] = {
(m1 ++ m2).transform {
case (key, _) => m1.getOrElse(key, 0) + m2.getOrElse(key, 0)
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句