假设我有以下特征。
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语句中遇到类型不匹配错误。有人可以帮忙吗?
答案 0 :(得分:0)
您需要为其他字符串指定case子句:
which match {
case "One" => modelOneTable
case "Two" => modelTwoTable
case _ => ... // which TableQuery should be returned for other strings
}