使用自我类型扩展特征时的非法继承

时间:2013-02-19 07:22:49

标签: scala

我对以下代码感到困惑:

    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

出了什么问题?我OT2一起扩展的原因是我想引用CLS中的课程O,我该如何实现?{/ p>

2 个答案:

答案 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
}

应该有用。