mysql - 返回两种类型的 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
}
注意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 子句:
which match {
case "One" => modelOneTable
case "Two" => modelTwoTable
case _ => ... // which TableQuery should be returned for other strings
}
推荐阅读
- python - 在 python 或 gnuplot 中从数组(但非网格数据)平滑插值热图
- java - 自定义错误页面未捕获 tomcat 中引发的异常
- bash - 删除某些目录末尾的字母的脚本
- python - 如何在熊猫中使用多个布尔列映射函数?
- android - 在 Espresso / UiAutomator 测试中测试闪光灯是否打开/关闭
- angular - 在这种情况下,如何从多个可观察对象中获取单个可观察对象?
- css - 我是 scss 新手,遇到 scss 代码格式的问题
- c# - 程序类型已存在:com.android.installreferrer.api.InstallReferrerClient$1
- r - 是否可以在 R 中使用向量数学进行涉及区间的求和?
- sql - 如何使用 Powershell 将进程信息获取到 SQL Server 表中,每个属性位于不同的行中?