Scala Play 2.3.0 с Anorm — не может использовать сопоставление с образцом (IntelliJ не может разрешить строку символов)

#scala #intellij-idea #playframework #anorm #playframework-2.3

#scala #intellij-идея #playframework #анорм #playframework-2.3

Вопрос:

Я разрабатываю приложение с Scala (2.11) и Play Framework (2.3.0) на IntelliJ IDEA. Я использую Anorm для извлечения данных из моей базы данных (MySQL с MariaDB).

Вот мое первое тестовое приложение (оно работает):

 package controllers

import play.api.mvc._
import play.api.db._
import anorm._

case class Client(id: Int, nom: String, prenom: String)

object Application extends Controller {

  def index = Action {
    var result: List[(Int, String)] = List()
    val sqlQuery = SQL(
      """
        select idClient, nameClient from Clients
        where idClient = {idClient};
      """
    ).on("idClient" -> 1)

    DB.withConnection { implicit conn =>
      result = sqlQuery().map(row =>
        row[Int]("IDClient") -> row[String]("NameClient")
      ).toList

    }
    Ok(result.toString)
  }
}
  

Это работает нормально. Я правильно получаю имя моего клиента. Однако, когда я пытаюсь использовать сопоставление с образцом, например:

 result = sqlQuery().collect {
  case Row(idClient: Int, nameClient: String) => idClient -> nameClient
}
  

IntelliJ выдает мне ошибку, указывая, что это « Cannot resolve Symbol Row «. Насколько я знаю, строка определена в библиотеке Anorm, как и SQL. Не имеет смысла, что SQL будет найден, а не строка…

Что происходит?

Комментарии:

1. Компилируется ли он с sbt?

2. Не могу сказать, почему он не может разрешить Row , поскольку он является частью anorm пакета (и моя чистая ненависть к IDE). Но вам все равно следует попробовать API синтаксического анализатора (последняя часть документации), а не сопоставление с образцом: playframework.com/documentation/2.3.x/ScalaAnorm

3. Кристиан> Да, я предполагаю, что это так, поскольку я создал проект с помощью Typesafe Activator, который включает sbt, и anorm.SQL работает нормально. LimbSoup> Спасибо. Я выполнил базовый тест с API синтаксического анализатора, и, похоже, он работает правильно. Однако, поскольку я не в первый раз сталкиваюсь с проблемами с внешними библиотеками и импортом (я фактически прекратил попытки использовать Scala Slick по аналогичным причинам перед переключением на Anorm), было бы здорово, если бы я мог найти ответ на вопрос, почему строка не разрешена.

Ответ №1:

анорм.В Play 2.3 нет экстрактора строк. Как и предполагалось, вы могли бы использовать синтаксический анализатор.

Комментарии:

1. О, ну это объясняет это. Спасибо, я уже начал использовать API синтаксического анализатора, и он работает хорошо.