Функция Scala, которая возвращает один из двух типов Slick TableQuerys

1

Предположим, что у меня есть следующая черта.

trait ModelTrait{
  def id: Option[Long]
  def name: String
}

И у меня есть две таблицы. Их классы case и поля tableQuery показаны ниже.

val modelOneTable = TableQuery[ModelOnes]
val modelTwoTable = TableQuery[ModelTwos]

case class ModelOne(id: Option[Long], name: String) extends ModelTrait

case class ModelTwo(id: Option[Long], name: String) extends ModelTrait

Я хотел бы создать функцию, которая, в зависимости от ввода, возвращает одно из полей tableQuery. Что-то вроде этого:

def getTableQuery(which: String): TableQuery[Table[ModelTrait]] = {
which match {
   case "One" => modelOneTable
   case _ => modelTwoTable
}

Обратите внимание, что modelOneTable - TableQuery[ModelOnes]. Класс ModelOnes (с s) расширяет Table[ModelOne]. Это то же самое для ModelTwo. Следовательно, почему функция возвращает TableQuery[Table[ModelTrait]].

class ModelOnes(tag: Tag) extends Table[ModelOne](tag, "modelOnes") {
  // ...
}

class ModelTwos(tag: Tag) extends Table[ModelTwo](tag, "modelTwos") {
  // ...
}

Но я получаю ошибки несоответствия типа в моих заявлениях о случаях. Может ли кто-нибудь помочь?

  • 0
    Где определяется TableQuery ?
  • 0
    @giorgio-b giorgio-b Это класс библиотеки Slick. Вы можете добавить его в зависимости в вашем build.sbt файл "com.typesafe.slick" %% "slick" % "3.2.3"
Показать ещё 1 комментарий
Теги:
slick

1 ответ

0

Вам нужно указать аргумент case для других строк:

which match {
   case "One" => modelOneTable
   case "Two" => modelTwoTable
   case _ => ... // which TableQuery should be returned for other strings
}
  • 0
    Извините, в моей фактической конфигурации у меня так написано, но я все равно получаю ошибку. Я отредактирую вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню