我有以下简化的代码来表示我在Scala到Map转换中遇到的编译问题。
代码
def test() : Option[Map[String, String]] = {
val someMap = Map("" -> List.empty[String] )
someMap
.get("")
.flatMap(_.headOption)
.map { span =>
val map = mutable.Map.empty[String, String]
map.toMap
}}
我收到此错误
多态表达式不能实例化为期望的类型;发现 :[T,U] scala.collection.immutable.Map [T,U]必需: scala.collection.concurrent.Map [String,String] map.toMap
不确定如何解决此问题。我无法更改函数的返回类型,因为它期望返回Option[Map[String, String]]
谢谢, 桑迪
答案 0 :(得分:0)
您尝试在返回类型中使用immutable
Map,但是返回mutable.Map
def test() : Option[Map[String, String]] = {
val someMap = Map("" -> List.empty[String] )
someMap
.get("")
.flatMap(_.headOption)
.map { span =>
Map.empty[String, String]
}
}
答案 1 :(得分:0)
导入scala.collection.mutable
后,您的代码会编译。您得到的错误表明您的测试函数期望返回类型scala.collection.concurrent.Map[String,String]
。我能想到的唯一原因是您在函数声明之前的某个位置导入了scala.collection.concurrent.Map
。
因此,immutable.Map类型被并发.Map类型掩盖,并且只需使用“ Map”就实际上声明了类型为Option[scala.collection.concurrent.Map[String, String]]
的返回值,因此会产生编译错误。
尝试在导入类型声明(scala.collection.immutable.Map
)中删除导入或使用完整路径。