11

どのように変換しますか:

trait Foo[A <: Foo[A]]

タイプメンバーに?

つまり、私は次のようなものが欲しいです:

trait Foo {
  type A <: Foo {type A = ???}
}

しかし、名前Aはすでに型の改良に使用されているため、問題が発生しています。この質問は似ています(そしてそこから生まれます):型パラメーターの代わりに型メンバーによるF有界量化?

4

1 に答える 1

17

自己型を使用します。

scala> trait Foo { self => type A <: Foo {type A = self.A}}
defined trait Foo

scala> class Bar extends Foo { type A = Bar }
defined class Bar

scala> class Bar extends Foo { type A = Int }
<console>:10: error: overriding type A in trait Foo with bounds <: Foo{type A = Bar.this.A};
 type A has incompatible type
       class Bar extends Foo { type A = Int }
                                    ^
于 2013-01-09T19:56:43.107 に答える