Я столкнулся с странной проблемой с отражением в Scala 2.10.0 Milestone 4, что я не могу окутать голову. Во-первых для материала, который работает так, как я хотел бы ожидать:Тип равенства в 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
аналогично (в той же сессии):
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
Никаких сюрпризов здесь: я могу попросить родителей это тип и получить именно то, что Я жду. Теперь я по существу сочетаю два примера выше:
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
Я не понимаю, как это может быть ложным. То же самое происходит, если у меня есть F
удлинить A[Seq[D]]
, A[Int]
и т. Д. Какое обобщение мне не хватает, что бы сделать это поведение понятным?
Я только что подтвердил, что это исправлено в 2.10.0-M5. –