2012-10-02 98 views
2

下面的示例中解決編譯錯誤的最佳方法是什麼?假設'm'必須是GenMap類型,並且我無法控制myFun的參數。不可變集合的類型別名

import scala.collection.GenMap 

object Test { 
    def myFun(m: Map[Int, String]) = m 

    val m: GenMap[Int, String] = Map(1 -> "One", 2 -> "two") 


    //Build error here on m.seq 
    // Found scala.collection.Map[Int, String] 
    // Required scala.collection.immutable.Map[Int, String] 
    val result = myFun(m.seq) 
} 

編輯:

我本來應該更清晰。在我的實際使用案例中,我無法控制myFun,所以我必須將它傳遞給Map。 'm'也來自另一個scala組件作爲GenMap。我需要一個轉換到另一個,但似乎collection.Map和collection.immutable.Map

回答

2

m.seq.toMap之間的衝突,將解決你的問題。

根據API中提供的簽名,toMap返回一個scala.collection.immutable.Map,它被認爲是您的錯誤消息中必需的。由seq方法返回的scala.collection.Map是一個更一般的特徵,它除了作爲不可變映射的父親之外,還是可變映射和併發映射的父親。

+0

謝謝。你能提供任何洞察,爲什麼最初不工作? – Pengin

+1

當然。查看更新。你幾乎在你的問題上有解釋。 –

+0

我以前不欣賞這個'父母'的生意。以前只是假定它是相同的。顯然不是。 – Pengin