1
按照我先前的post(並在那裏一個評論)我想充實類(即擴展Table
)(從油滑),並添加富民型與隱
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
(編譯時失敗)告訴我隱式轉換不起作用。我必須在內隱中錯過一些愚蠢的東西?
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.
問題出現在隱式中。它不能罰'tenantId'屬性,並在'e.filter(_。tenantId === id)'上失敗'抱怨值tenantId不是類型參數Q. – 2014-11-23 14:27:46
的成員當然不是 - 因爲您已經定義了不必要的隱式def toRich在RichT裏面而不是'val tenantId = ...'。所以你在問題中添加了'toRich'而不是'tenantId',參見Q. – dk14 2014-11-23 14:36:25
。當我收到編譯錯誤時,我沒有隱式def。 – 2014-11-23 15:47:29