Проблема преобразования типов в Scala toMap - PullRequest
0 голосов
/ 26 июня 2018

У меня есть следующий упрощенный код для представления проблемы компиляции, с которой я сталкиваюсь при преобразовании scala в карту.

код

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

спасибо, Sandy

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

После импорта 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 голосов
/ 26 июня 2018

Вы пытаетесь использовать 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]
      }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...