2012-12-10 124 views
1

我有這樣的方法在抽象類中定義:奇怪隱含的Scala編譯錯誤

abstract class RichTable[T](name: String) extends Table[T](name) { 
    def insert(model : T) = Database { implicit db: Session => 
    *.insert(model.copy(id = getNextId(classOf[T].getSimpleName()))) 
    } 
    //other methods which are fine 
} 

,它(model.copy)說:

could not find implicit value for evidence parameter of type scala.slick.lifted.TypeMapper[T] 

我根本不知道如何解決這個問題。我是一名斯卡拉初學者,我只是堅持這一點。有人可以給我一個線索嗎?

回答

0

證據參數是函數的curried隱式參數,如model.copy(id)(implicit typeMapper)。您需要聲明implicit val typeMapper: scala.slick.lifted.TypeMapper[T] = something。在model.copy的源中搜索F3。

編輯

不太正確,改變def insert(model: T) to def insert[T: ClassManifest](model: T)應該做的伎倆。爲什麼?

在函數內部,使用classOf[T],但實際的T類型在運行時會被擦除,並且不清楚應該調用哪個類getSimpleName()。所以你應該聲明一個帶有ClassManifest範圍的類型參數,並且應該自動添加一個適當類型的隱式參數[T](model: T)(implicit evidence$1: ClassManifest[T])