scala - 不可变集合的类型别名

标签 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 之间似乎存在冲突

最佳答案

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

根据 API 中提供的签名toMap 返回一个 scala.collection.immutable.Map ,据说错误消息中需要它。 seq 方法返回的 scala.collection.Map 是一个更通用的特征,它除了是不可变映射的父级之外,也是可变和并发映射的父级。

关于scala - 不可变集合的类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688989/

相关文章:

scala - 如何仅将集合发送到 spark 节点一次?

exception - 如何使用 ScalaTest 测试预期异常的其他属性

scala - Pureconfig 将配置读取为属性映射

performance - Scala:嵌套 for 循环和 for 理解之间的性能差异

scala - 如何一次到 "find"序列元素和谓词结果?

scala:用具体类型覆盖通用的存在类型的值

scala - 如何在列表中找到匹配的元素并将其映射为Scala API方法?

scala - 在 Scala 中的 map 上使用收集

scala - Scala 中的 JavaConverters 和 JavaConversions 有什么区别?