Tôi đang gặp sự cố lạ với sự phản ánh trong Scala 2.10.0 Milestone 4 mà tôi không thể che giấu đầu mình. Đầu tiên cho những thứ mà làm việc theo cách mà tôi mong muốn:Gõ bình đẳng trong API phản xạ Scala 2.10
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
Tương tự như vậy (trong cùng một phiên):
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
Không có bất ngờ ở đây: Tôi có thể yêu cầu cha mẹ của một loại và nhận được chính xác những gì Tôi mong đợi. Bây giờ tôi về cơ bản kết hợp hai ví dụ trên:
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
Tôi không hiểu điều này có thể sai. Điều tương tự cũng xảy ra nếu tôi có F
mở rộng A[Seq[D]]
, A[Int]
, v.v ... Khái niệm chung tôi thiếu là làm cho hành vi này có ý nghĩa gì?
Tôi vừa xác nhận rằng điều này được khắc phục trong phiên bản 2.10.0-M5. –