具有隐式的丰富类型

时间:2014-11-23 12:46:40

标签: scala

按照我之前的post(以及其中一条评论),我试图丰富类(扩展Table)(来自Slick)并添加

val tenantId: Column[Int] = column[Int]("tenant_id")

我有

class RichT[T, Q <: Table[T]](t: Q) {
  implicit def toRich= {
    val tenantId: Column[Int] = t.column[Int]("tenant_id")
  }
}

 implicit def table2RichTable[T, Q <: Table[T]](t: Q) = new RichT[T, Q](t)

在尝试编写类似跟随它的通用函数时仍然无法为传递的tenantId找到T(在编译时失败)告诉我隐式转换不是&n工作。我必须在隐含中遗漏一些愚蠢的东西?

def selectById[T, Q <: Table[T]](t: Q, e: TableQuery[Q], id: Int)(implicit s: Session) = {
  e.filter(_.tenantId === id)
}

更新

object RichTable {
  implicit class RichT[T, Q <: Table[T]](t: Q) {
    val tenantId: Column[Int] = t.column[Int]("tenant_id")
  }
}

import RithTable._

def selectById[T, Q <: Table[T]](t: Q, e: TableQuery[Q], id: Int)(implicit s: Session) = {
    e.filter(_.tenantId === id)
}

错误value tenantId is not a member of type parameter Q.

1 个答案:

答案 0 :(得分:2)

也许你应该只是:

implicit class RichT[Q <: Table[_]](t: Q) {
  val tenantId: Column[Int] = t.column[Int]("tenant_id") 
}