为不可变集合键入别名

时间:2012-10-02 10:56:07

标签: scala scala-collections

在下面的示例中,解决编译错误的最佳方法是什么?假设'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之间似乎存在冲突

1 个答案:

答案 0 :(得分:2)

m.seq.toMap将解决您的问题。

根据API toMap中显示的签名返回scala.collection.immutable.Map,据说您的错误消息中需要该scala.collection.Mapseq方法返回的{{1}}是一个更普遍的特征,除了作为不可变映射的父级之外,它也是可变和并发映射的父级。