这个问题遵循Cake 模式中的一个问题,其中覆盖抽象类型不与 Upper Type Bounds 一起工作。我想用<:
. 前面的链接给出了解决方案,其中包括通过写入特征 S 来改变线性化的顺序。但是,我添加了一个在以下代码中this: Cake with S
命名的控制抽象。control
我想调用其中的方法t
。
trait A {
def ping = println("ping")
}
trait Cake {
type T
}
trait S { this: Cake with S =>
type T <: A with S
def t: T
def s = println("test")
// def control(c: =>T): T = c // compile
// def control(c: =>T): T = c.s // does not compile
def control(c: =>T): T = c.t // does not compile
t.ping
t.s
}
但是,这段代码会导致我无法解释的编译错误
found : S.this.T#T
required: S.this.T
def control(c: =>T): T = c.t
^
怎么了 ?