Равенство типов в Scala 2.10 Reflection API

У меня возникла странная проблема с отражением в Scala 2.10.0 Milestone 4 , которую я не могу понять. Сначала за то, что работает так, как я ожидал:

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

Я не понимаю, как это может быть ложью. То же самое происходит, если у меня есть Fextend A[Seq[D]], A[Int]и т. д. Какое обобщение я упускаю, что сделало бы это поведение логичным?

5
задан Travis Brown 29 June 2012 в 01:06
поделиться