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

mon*_*ica 4 scala

我对以下代码感到困惑:

    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

出了什么问题?我延长的原因OT2是,我想引用类CLSO,我怎么能做到这一点?

EEC*_*LOR 13

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

object O extends T2 with T1
Run Code Online (Sandbox Code Playgroud)

然后,您可能会收到type S未定义的错误.这是一件好事,因为它用于定义CLS


dre*_*xin 6

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

object O extens T1 with T2 {
  type S = Whatever
}
Run Code Online (Sandbox Code Playgroud)

应该管用.