2014-11-23 24 views
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.

回答

2

也許你應該:

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

問題出現在隱式中。它不能罰'tenantId'屬性,並在'e.filter(_。tenantId === id)'上失敗'抱怨值tenantId不是類型參數Q. – 2014-11-23 14:27:46

+0

的成員當然不是 - 因爲您已經定義了不必要的隱式def toRich在RichT裏面而不是'val tenantId = ...'。所以你在問題中添加了'toRich'而不是'tenantId',參見Q. – dk14 2014-11-23 14:36:25

+0

。當我收到編譯錯誤時,我沒有隱式def。 – 2014-11-23 15:47:29