gpt4 book ai didi

scala - Scala 2.10 反射 API 中的类型相等

转载 作者:行者123 更新时间:2023-12-04 17:38:16 25 4
gpt4 key购买 nike

我在 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

同样(在同一 session 中):
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

毫无意外:我可以要求一个类型的 parent 并得到我所期望的。现在我基本上结合了上面的两个例子:
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]等。我缺少什么使这种行为有意义的概括?

最佳答案

那是一个错误。就在今天早上,我正要调查并修复它。

编辑 .这似乎是泄漏到用户空间的 Scala 反射 API 的实现细节。这不容易修复,所以现在我们保持原样,但会研究改进的可能性。

同时,要获得正确的结果,应始终使用 =:=比较类型,而不是 == .

关于scala - Scala 2.10 反射 API 中的类型相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com