【问题标题】:Slick Scala method inferred generic typeSlick Scala 方法推断泛型类型
【发布时间】:2017-04-12 14:28:37
【问题描述】:

所以我想实现一个 trait 来拥有一个通用的执行函数来运行 slick 的查询。

从下面的代码可以看出,我有一个 trait,它在类上有一个类型参数,另一个在方法上定义了类型参数。

当我编译时,带有方法泛型类型的特征编译(不提供任何类型参数),但另一个没有。

为什么???我试图给类类型参数 UserTable 或 User(我的光滑表定义和投影案例类),但它们都不起作用。错误只是说“期望 DBIO[UserTable] 但实际 MySQLDriver.StreamingDriverAction”

非常感谢任何帮助。

非常感谢!!!

class DAO @Inject()(val configProvider: DatabaseConfigProvider) extends 
    ManagementAppDatabase {
    private val users = TableQuery[UserTable]

  def findUserByEmail(email: String): Future[Option[User]] = {
    execute(users.filter(_.email === email).result.headOption)
  }
}

trait ManagementAppDatabase {
  val configProvider: DatabaseConfigProvider
 def execute[T](dBIO:DBIO[T]): Future[T] = configProvider.get[JdbcProfile].db.run(dBIO)
}

trait ManagementAppDatabase[T] {
  val configProvider: DatabaseConfigProvider
 def execute (dBIO:DBIO[T]):Future[T]=configProvider.get[JdbcProfile].db.run(dBIO)
}

【问题讨论】:

    标签: scala generics slick traits


    【解决方案1】:

    如果你扩展例如ManagementAppDatabase[User],那么你只能在DBIO[User]上拨打execute。但是users.filter(_.email === email).result.headOptionDBIO[Option[User]]。就是这样。

    【讨论】:

    • 啊,我明白了,非常感谢!如果也能回答,只是一个附加问题,我将不胜感激。那么 Scala 在这种情况下如何推断类型参数(因为我没有给出任何具体的类型参数)?和/或 Scala 通常如何推断出这样的类型?
    • 在这种情况下,execute 首先没有要推断的类型参数。回答第二个问题不适合。
    • 谢谢。我已经创建了一个单独的问题:(stackoverflow.com/questions/43381289/…)如果你能回答,真的很感激!
    猜你喜欢
    • 2017-09-08
    • 2023-03-08
    • 1970-01-01
    • 2012-11-29
    • 2013-06-04
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多