5

次のコードで混乱しています:

    trait T1 {
        type S
    }

    trait T2 {
      self: T1 =>

       case  class ClS(s: S)
    }

    object O extends T2 {

    }

次のエラー メッセージが表示されます。

違法な相続; tests.O.type は tests.T2 の自己型 tests.T2 with tests.T1 に準拠していません

何がうまくいかないのですか?O拡張する理由は、でクラスをT2参照したいからです。どうすればそれを達成できますか?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 に答える