【发布时间】:2012-06-30 13:52:42
【问题描述】:
我在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
我不明白这怎么可能是假的。如果我有 F 扩展 A[Seq[D]]、A[Int] 等,也会发生同样的事情。我缺少什么可以使这种行为有意义的概括?
【问题讨论】:
-
我刚刚确认这已在 2.10.0-M5 中修复。
标签: scala reflection types scala-2.10