簡體   English   中英

斯卡拉型不匹配; 找到Int,必填字符串

[英]Scala - type mismatch; found Int, required String

我在Scala中遇到類型不匹配的問題。 編譯器返回錯誤:

錯誤:類型不匹配; found:需要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) ,這給你帶來了問題。

UPDATE

我想出了一個更簡單的問題解決方案:

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)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM