我对以下代码感到困惑:
trait T1 {
type S
}
trait T2 {
self: T1 =>
case class ClS(s: S)
}
object O extends T2 {
}
Run Code Online (Sandbox Code Playgroud)
它给出以下错误消息:
非法继承; tests.O.type不符合tests.T2的自我类型测试.T2 with tests.T1
出了什么问题?我延长的原因O有T2是,我想引用类CLS的O,我怎么能做到这一点?
EEC*_*LOR 13
trait T2有一份合同说:如果你继承我,你也应该继承T1.
object O extends T2 with T1
Run Code Online (Sandbox Code Playgroud)
然后,您可能会收到type S未定义的错误.这是一件好事,因为它用于定义CLS
T2有一个自我类型T1,这意味着,从T2继承的每个类/对象/特征必须是T1类型,所以在你的情况下
object O extens T1 with T2 {
type S = Whatever
}
Run Code Online (Sandbox Code Playgroud)
应该管用.
| 归档时间: |
|
| 查看次数: |
5914 次 |
| 最近记录: |