我运行到与反射一个奇怪的问题斯卡拉2.10.0里程碑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
我不明白这到底是怎么是假的。 同样的事情发生,如果我有F
延长A[Seq[D]]
A[Int]
等什么我失踪,将使这种行为泛化有意义吗?