質問

次のコンパイルを使用するように、適用されていない高次パラメーターの境界を指定するにはどうすればよいですか。

trait Declr[Impl[_]]   // need to specify constraints for Impl's type parameter

trait Sys[S <: Sys[S]]

object X extends Declr[X]  // doesn't compile, because S is more strict
trait X[S <: Sys[S]]

より多くのタイプパラメーターを追加せずに Declr. 。ソリューションは、 Implのパラメーターはです いつも S <: Sys[S] (つまり、それはに入ることができるあらゆるタイプに縛られています Declr).

私はタイプで制約を書くことができると思います メンバー このような:

trait Declr {
  type Impl[S <: Sys[S]]
}

object X extends Declr {
  type Impl[S <: Sys[S]] = X[S]
}
trait X[S <: Sys[S]]

しかし、これをタイプとして行う方法 パラメーター (の修正として type Impl とてもうるさいです、そして私は持っていたいです object X できるだけきれいに)?

役に立ちましたか?

解決

なぜだめですか

trait Declr[Impl[S <: Sys[S]]]
trait Sys[ S <: Sys[ S ]]

object X extends Declr[ X ]  
trait X[ S <: Sys[ S ]]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top