一个Scala函数,它返回两种类型的Slick TableQuerys之一

时间:2018-06-12 11:43:22

标签: mysql scala slick

假设我有以下特征。

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
}

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

但我在我的case语句中遇到类型不匹配错误。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

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