Scala: ошибка компиляции: не удается разрешить перегруженный метод - PullRequest
0 голосов
/ 30 апреля 2020

Я импортировал в Intellij проект Play / Scala с следующим методом , который получает ошибку компиляции по причине, которую я не понимаю. Есть идеи, что здесь не так?

Я использую Java 8 и Scala 2.11.6.

  def fetchUser(id: Long): Option[UserRecord] =
    Cache.getAs[UserRecord](id.toString).map { user =>
      Some(user)
    } getOrElse {
      DB.withConnection { connection =>
        val sql = DSL.using(connection, SQLDialect.POSTGRES_9_4)
        val user = Option(sql.selectFrom[UserRecord](USER).where(USER.ID.equal(id)).fetchOne())
        user.foreach { u =>
          Cache.set(u.getId.toString, u)
        }
        user
      }
    }

Ошибка компиляции при вызове метода withConnection , Ошибка: Cannot resolve overloaded method 'withConnection'.

Когда я пытаюсь перейти к реализации метода withConnection, компилятор предлагает два возможных метода в классе play.api.db.DB (2.4.3):

  /**
   * Execute a block of code, providing a JDBC connection. The connection is
   * automatically released.
   *
   * @param name The datasource name.
   * @param autocommit when `true`, sets this connection to auto-commit
   * @param block Code block to execute.
   */
  def withConnection[A](name: String = "default", autocommit: Boolean = true)(block: Connection => A)(implicit app: Application): A =
    db.database(name).withConnection(autocommit)(block)

  /**
   * Execute a block of code, providing a JDBC connection. The connection and all created statements are
   * automatically released.
   *
   * @param block Code block to execute.
   */
  def withConnection[A](block: Connection => A)(implicit app: Application): A =
    db.database("default").withConnection(block)

1 Ответ

0 голосов
/ 01 мая 2020

Компилятор должен найти

def withConnection[A](block: Connection => A)(implicit app: Application): A =
    db.database("default").withConnection(block)

, потому что это соответствует вызову

DB.withConnection { ... }

, который совпадает с

DB.withConnection( block = { ... })

, пока он может найти неявное Application. Я не знаю, где это неявное Application существует, но, поскольку это от образца проекта до книги, я предполагаю, что оно где-то существует и работало в прошлом.

Вы опубликовали три вопроса, относящихся к сборке. ошибки об этом проекте. Пожалуйста, не публикуйте новый вопрос каждый раз, когда вы сталкиваетесь с ошибкой сборки для этого проекта. Дело не в этом. Эти вопросы лучше всего адресовать сопровождающему самого проекта ie. автор на странице вопросов репозитория GitHub.

Теперь не похоже, что этот проект поддерживается. Это старый проект. С большой вероятностью вы столкнетесь с проблемами, когда что-то сломано из-за устаревших версий. Попробуйте вместо этого задать ОДИН вопрос о создании старого игрового проекта.

...