jestem trochę zakłopotany przez surowość typechecker poniżej — wydaje się, że niezmienna T
pozycja Inv[T]
jest niezmienna w ciągu Variantish
„s liście parametrów:Dlaczego wszystkie niezmienne pozycje klas ogólnych są niezmienne w listach parametrów typów w Scali?
scala> class Inv[T]
defined class Inv
scala> class Variantish[+T, +TVar <: Inv[T]]
<console>:12: error: covariant type T occurs in invariant position in type <: Inv[T] of type TVar
class Variantish[+T, +TVar <: Inv[T]]
^
rodzaje wariant może normalnie występować w co patrzeć jak niezmienne pozycje list argumentów ustawowo, np z obiektu chronionego widoczności:
class Variantish[+T](protected[this] var v: Inv[T])
i wydaje się, że dodaje byłaby równie typesafe:
class Variantish[+T, +TVar <: Inv[T]](protected[this] var v: TVar)
Need które sprawdzają wspomniano powyżej jest tak ścisły?