我遇到了一個奇怪的問題,在Scala 2.10.0 Milestone 4中反射,我無法環繞我的頭。首先對於工作方式的東西,我會期望:Scala中的類型相等2.10反射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。 –