[英]Illegal inheritance while extending trait with self type
我对以下代码感到困惑:
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
怎么了? 我用T2
扩展O
的原因是我想在O
引用类CLS
,我该如何实现?
trait T2
有一个契约说:如果你从我那里继承,你也应该从T1
继承。
object O extends T2 with T1
然后,您可能会收到未定义type S
的错误。 这是一件好事,因为它用于CLS
的定义
T2 有一个 self 类型 T1,这意味着从 T2 继承的每个类/对象/特征都必须是 T1 类型,所以在你的情况下
object O extens T1 with T2 {
type S = Whatever
}
应该管用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.