ある f-bounded 型から別の型への射影を使用すると、理解できない型エラーが発生します。以前の質問に関連している可能性がありますが、よくわかりません。
セットアップは簡単です:
trait Foo[F <: Foo[F]] {
type I <: Foo[I]
}
つまり、F
別の同様のシステムへの投影を含むシステムがあります。
わかりました、今私がする必要があるのは、与えられF
た を使用できるようにすることF#I
です。しかし、コンパイラは文句を言います:
trait Test {
def apply[F <: Foo[F]]: Unit = bar[F#I] // type error
def bar [F <: Foo[F]]: Unit = ???
}
<console>:52: error: type arguments [F#I] do not conform to method bar's
type parameter bounds [F <: Foo[F]]
def apply[F <: Foo[F]]: Unit = bar[F#I]
^
では、これはなぜですか?そして、解決策はありますか?
実際には、何が起こっているのかを説明していない、この問題の変種のようです。
編集:たとえば、次のコンパイル:
trait Test {
def apply[F <: Foo[F] { type I = I1 }, I1 <: Foo[I1]]: Unit = bar[I1]
def bar [F <: Foo[F]]: Unit = ???
}
ここでの問題は、そのくだらない型パラメーターI1
が API の数十のレベルにバブルアップすることです。そのため、2 番目の型パラメーターを回避する解決策を見つける必要があります。