5

我对以下代码感到困惑:

    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 和 tests.T1

怎么了?我扩展的原因OT2我想引用中的类CLSO我该如何实现呢?

4

2 回答 2

15

trait T2有一个合同说:如果你继承自我,你也应该继承自T1.

object O extends T2 with T1

然后你可能会得到一个type S未定义的错误。这是一件好事,因为它被用于定义CLS

于 2013-02-19T07:30:12.647 回答
6

T2 有一个自身类型 T1,这意味着从 T2 继承的每个类/对象/特征都必须是 T1 类型,所以在你的情况下

object O extens T1 with T2 {
  type S = Whatever
}

应该管用。

于 2013-02-19T07:28:47.123 回答