繁体   English   中英

使用 self 类型扩展 trait 时非法继承

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM