解决下面示例中的编译错误的最佳方法是什么?假设“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/