Scala для понимания результата работы с картой прибывает как Int - PullRequest
0 голосов
/ 09 мая 2018

Пожалуйста, посмотрите на приведенный ниже код:

`

val d= for{
      t <- db.getSomething()
      ids <- t.map(_.id).toSeq
      histo <- fetchOtherRelatedDetails(ids)
    } yield histo

`

Здесь db.getSomething возвращает будущее [Seq [SomeObject]], поэтомуЯ пытаюсь получить объект и затем отобразить их идентификаторы в список, а затем хотел вызвать другую функцию, которая будет обрабатывать идентификаторы для получения результата в будущем.Проблема с компилятором в том, что он принимает ids как Int, которое должно быть Seq[Int]

Я что-то не так делаю?

1 Ответ

0 голосов
/ 09 мая 2018

На первый взгляд, у вас есть несоответствие типов для понимания:

for {
  t <- db.getSomething()
  ids <- t.map(_.id).toSeq
  histo <- fetchOtherRelatedDetails(ids)
} yield histo

это десугары до

db.getSomething().flatMap { t =>
  t.map(_.id).toSeq.flatMap { ids =>
//^_______________________^ 
// the return type of this expression is Seq[A], but Future[A] is expected
    fetchOtherRelatedDetails(ids).map(histo => histo)
  }
}

Как уже было отмечено, вы не можете вернуть Seq там, где ожидается Future. Другими словами, все выражение справа от <- должно иметь общий «контейнер» (в данном случае Future) для проверки на проверку типов.

В этом конкретном случае вы можете исправить это с помощью назначения вместо flatMap (<-)

for {
  t <- db.getSomething()
  ids = t.map(_.id).toSeq
  histo <- fetchOtherRelatedDetails(ids)
} yield histo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...