Функция Scala, которая возвращает один из двух типов Slick TableQuerys - PullRequest
0 голосов
/ 12 июня 2018

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

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") {
  // ...
}

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

1 Ответ

0 голосов
/ 12 июня 2018

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

which match {
   case "One" => modelOneTable
   case "Two" => modelTwoTable
   case _ => ... // which TableQuery should be returned for other strings
}
...