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] .