scala - covariantes - matriz de gram
Tipo covariante T se produce en posiciĆ³n contravariante. (1)
Sé que esta pregunta se ha hecho antes, pero o bien las respuestas no se aplican a este caso o no las entiendo.
Básicamente, ¿por qué no funciona el siguiente (ejemplo simple que recrea mi problema)?
class Test[+T] {
var list: List[T] = _
}
El problema que tengo es que tengo un objeto, donde quiero pasar en una instancia de Prueba [Nada] (la Prueba vacía), y esto no funciona a menos que haga la Prueba variante en T.
Hacer covariante de prueba en T
significa que Test[A]
es un subtipo de Test[Any]
para cualquier A
Así que vamos a crear una Test
:
val test_string = new Test[String]
Ahora tenemos una Test[String]
y la list
contenida es tipo List[String]
.
Dado que Test[String]
es un subtipo de Test[Any]
, se debe permitir lo siguiente:
val test_any : Test[Any] = test_string
Y ahora, tenemos un Test[Any]
, y por test_any.list
tanto test_any.list
es de tipo List[Any]
, lo que significa que lo siguiente debería ser válido:
test_any.list = List[Any]()
Lo que significa que simplemente asignamos un miembro de la List[Any]
a la lista de pruebas, que no debería estar permitido, ya que se supone que es una List[String]
, no una List[Any]
. También significa que podría anteponer cualquier cosa a la lista, ya que es de tipo List[Any]
.