Как исправить: «найдено: (AnyVal, AnyVal) требуется: (Double, Double)» с фьючерсами - PullRequest
0 голосов
/ 31 января 2019

Ошибка компиляции:

[ошибка] найдена: ((Double, Double)) => scala.concurrent.Future [(Double, Double)]

[ошибка]требуется: ((AnyVal, AnyVal)) => scala.concurrent.Future [?] [error] (c: (Double, Double)) => Future (c) .map (x => x)

IDE прекрасно принимает код.

Код был написан с использованием for loop и yield.Я попытался упростить его.

def f(r: UUID, l: Int) = {
  g(r).flatMap { (c: (Double, Double)) => /*** this part is just for the debugging ***/
    Future(c).map(x=>x)
  }
}

def g(r: UUID) = {
  session.selectOne(
    s"""
      SELECT
        ${RR.x},
        ${RR.y}
      FROM
        ${RR.g}
      WHERE
        ${RR.r} = ?
      ORDER BY
        ${RR.t} DESC
    """,
    r.toString
  ).map {
    case Some(row) => (1.0,1.0) //will be replaced when it is working
    case None => (0,0)
  }
}

Компилятор находит c типа (AnyVal, AnyVal) Я хочу, чтобы оно было (Double, Double)

1 Ответ

0 голосов
/ 31 января 2019

На самом деле жалуется, что сигнатура функции метода, который вы передаете в плоскую карту, не то, что ему нужно.Попробуйте изменить case None => (0,0) строку на case None => (0d, 0d) в функции g.Если две ветви case возвращают разные типы, по умолчанию используется супертип обоих типов.В этом случае похоже, что ваша g функция возвращает тип (AnyVal,AnyVal)

...