Me encuentro con un problema extraño con la reflexión en Scala 2.10.0 Milestone 4 que no puedo entender. En primer lugar para las cosas que funciona de la manera que cabe esperar:Escriba la igualdad en la API de Reflexión de Scala 2.10
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> trait A[X]; trait B[Y] extends A[Y]
defined trait A
defined trait B
scala> typeOf[B[String]].parents
res0: List[reflect.runtime.universe.Type] = List(java.lang.Object, A[String])
scala> typeOf[B[String]].parents contains typeOf[A[String]]
res1: Boolean = true
mismo modo (en la misma sesión):
scala> trait D; trait E extends A[D]
defined trait D
defined trait E
scala> typeOf[E].parents
res2: List[reflect.runtime.universe.Type] = List(java.lang.Object, A[D])
scala> typeOf[E].parents contains typeOf[A[D]]
res3: Boolean = true
No hay sorpresas aquí: Puedo preguntar por los padres de un tipo y obtener exactamente lo Espero. Ahora esencialmente combino los dos ejemplos anteriores:
scala> trait F extends A[String]
defined trait F
scala> typeOf[F].parents
res4: List[reflect.runtime.universe.Type] = List(java.lang.Object, A[String])
scala> typeOf[F].parents contains typeOf[A[String]]
res5: Boolean = false
No entiendo cómo esto podría ser falso. Lo mismo sucede si tengo F
extienden A[Seq[D]]
, A[Int]
, etc. ¿Cuál es la generalización que me falta que haría que este comportamiento tenga sentido?
Acabo de confirmar que esto se ha solucionado en 2.10.0-M5. –