我对以下代码感到困惑:
trait T1 {
type S
}
trait T2 {
self: T1 =>
case class ClS(s: S)
}
object O extends T2 {
}
它发出以下错误消息:
非法继承; tests.O.type不符合tests.T2的 selftype tests.T2 with tests.T1
出了什么问题?我O
与T2
一起扩展的原因是我想引用CLS
中的课程O
,我该如何实现?{/ p>
答案 0 :(得分:13)
trait T2
有一份合同,上面写着:如果你继承我,你也应该继承T1
。
object O extends T2 with T1
然后,您可能会收到type S
未定义的错误。这是一件好事,因为它用于CLS
答案 1 :(得分:6)
T2有一个自我类型T1,这意味着,从T2继承的每个类/对象/特征都必须是T1类型,所以在你的情况下
object O extens T1 with T2 {
type S = Whatever
}
应该有用。