我有三F-綁定類型A
,B
& C
,其中B
由A
參數化的,並且C
由B
參數化(並因此也通過A
)。我可以實例化A
和B
,但是當我嘗試實例化C
時,編譯器無法推斷出這些類型。如果我明確地給出它的類型,一切都可行 - 但這些類型丟失似乎相當愚蠢(這是由於類型擦除?)。構建三級深F-綁定類型
sealed trait A[AA <: A[AA]] {
self =>
val data: String
}
case class AInst(data: String) extends A[AInst]
sealed trait B[BB <: B[BB, AA], AA <: A[AA]] {
self: BB =>
val content: AA
}
case class BInst[AA <: A[AA]](content: AA) extends B[BInst[AA], AA]
sealed trait C[CC <: C[CC, BB, AA], BB <: B[BB, AA], AA <: A[AA]] {
self: CC =>
val content: BB
}
case class CInst[BB <: B[BB, AA], AA <: A[AA]](content: BB)
extends C[CInst[BB, AA], BB, AA]
val a1 = new AInst("A1")
val b1 = BInst(a1)
val c1 = CInst[BInst[AInst],AInst](b1)
有一個變通,在那裏我沒有爲CInst
專門指定的類型?
我目前使用類型參數化來實現F-Bounds,但是會切換到抽象類型成員來解決這個問題嗎?上課怎麼樣?
我在這裏的例子:https://stackoverflow.com/questions/1154571/scala-abstract-types-vs-generics/10891994#10891994 – ayvango