首页 > 解决方案 > 返回两种类型的 Slick TableQuerys 之一的 Scala 函数

问题描述

假设我有以下特征。

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

而且我有两张桌子。它们的案例类和 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
}

注意modelOneTableTableQuery[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") {
  // ...
}

但是我的案例陈述中出现类型不匹配错误。任何人都可以帮忙吗?

标签: mysqlscalaslick

解决方案


您需要为其他字符串指定 case 子句:

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

推荐阅读