Ich bin in ein seltsames Problem mit der Reflexion in Scala 2.10.0 Milestone 4, die ich nicht meinen Kopf wickeln kann. für das Material zuerst, die so funktioniert, würde ich erwarten:Geben Sie die Gleichheit in der Scala 2.10 Reflection API
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
ähnlich (in der gleichen Sitzung):
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
Keine Überraschungen hier: Ich für eine Art Eltern fragen kann und genau das bekommen, was Ich erwarte. Jetzt kombiniere ich im Wesentlichen die beiden obigen Beispiele:
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
Ich verstehe nicht, wie das falsch sein könnte. Das Gleiche passiert, wenn ich F
extendiere A[Seq[D]]
, A[Int]
usw. Was ist die Verallgemeinerung, die ich vermisse, die dieses Verhalten sinnvoll machen würde?
Ich habe gerade bestätigt, dass dies in 2.10.0-M5 behoben ist. –