2012-06-03 12 views
8

直下型再帰だけの作品:間接再帰ジェネリック型定義Scalaでは

CyclicTraits.scala:23: error: type arguments [UU[V]] do not conform to 
    trait VV's type parameter bounds [U <: UU[VV[U]]] 
trait UU[V <: VV[UU[V]]] 
      ^
CyclicTraits.scala:25: error: type arguments [VV[U]] do not conform to 
    trait UU's type parameter bounds [V <: VV[UU[V]]] 
trait VV[U <: UU[VV[U]]] 
      ^

:私にエラーを与える

trait TT[T<:TT[T]] 

をしかし、私は単純なアプローチで

trait UU[V <: VV[UU[V]]] 
trait VV[U <: UU[VV[U]]] 

を間接的なものを作っことができます間接的な型パラメータの再帰を適切に表現する方法

答えて

11

ここでの問題は再帰ではなく、エラーメッセージに示されているように、実際には境界に適合しない型パラメータの問題です。あなたはパラメータの共変作る場合、あなたの例では完璧に動作します:(共分散なし)バージョンで

trait UU[+V <: VV[UU[V]]] 
trait VV[+U <: UU[VV[U]]] 

を、VVV[UU[V]]のサブタイプであるという事実は、UU[VV[UU[V]]]のサブタイプであるUU[V]かどうかについての私達に何も伝えていません、適合性エラーが発生します。型パラメータが共変である場合、サブタイプがVV[UU[V]]であるVUU[V]がサブタイプUU[VV[UU[V]]]であり、すべてが問題ないことがわかります。

関連する問題