Scala toMap类型转换问题

问题描述 投票:-1回答:2

我有以下简化代码来表示我在scala toMap转换时遇到的编译问题。

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]]

谢谢,桑迪

scala type-conversion
2个回答
0
投票

导入scala.collection.mutable后,您的代码会编译。您得到的错误表明您的测试函数需要返回scala.collection.concurrent.Map[String,String]类型。我能想到的唯一原因是你在宣布你的功能之前已经在某处导入了scala.collection.concurrent.Map

因此,immutable.Map类型被concurrent.Map类型屏蔽,并且通过简单地使用“Map”实际上声明了Option[scala.collection.concurrent.Map[String, String]]类型的返回,因此编译错误。

尝试删除导入或使用返回类型声明(scala.collection.immutable.Map)中的完整路径。


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]
      }
 }
© www.soinside.com 2019 - 2024. All rights reserved.