2016-03-21 31 views
1

我使用的路徑依賴的類型按以下方式:在具體化,反映的實施斯卡拉相關產品無無謂蒙上

trait Schema { 
    type Repr 
} 

trait Mapping[A] { 
    val schema: Schema 
    def reify(repr: schema.Repr): A 
    def reflect(value: A): schema.Repr 
} 

object Mapping { 
    implicit def trivialMapping(s: Schema): Mapping[s.Repr] = new Mapping[s.Repr] { 
    override final val schema: Schema = s 
    override def reify(repr: schema.Repr): s.Repr = repr.asInstanceOf[s.Repr] 
    override def reflect(value: s.Repr): schema.Repr = value.asInstanceOf[schema.Repr] 
    } 
} 

注意asInstanceOf。我相信這些都毫無意義,因爲「模式」總是等於「s」。有沒有任何慣用的方式來實現這種模式,沒有類型轉換?第二個問題:爲什麼「s」可能與「模式」不同,或者scalac不知道價值平等有什麼細微之處?

回答

4

的問題是這一行:

override final val schema: Schema = s 

Schema是過於籠統,有一個抽象Repr。 要麼給它的單身類型s或提供一個類型的細化,指定Reprs.Repr

+0

哦..是的。 「s.type」的作品。謝謝! –