2012-10-02 63 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