【发布时间】:2018-10-12 19:02:06
【问题描述】:
注意这是一个社区帖子,应根据需要添加示例。如果您无法直接编辑答案以添加示例(问题示例或解决方案),请在评论中发布带有指向要点(或类似内容)的链接或添加单独的答案,以便稍后集成。
Scala 3 可能根本不包含scala.reflect.runtime(Dotty 目前不包含,并且不确定是否计划这样做)。虽然适用于 Scala 2 和 Dotty 的答案可能更适合用于过渡目的和立即提高性能,但也欢迎特定于 Dotty 的解决方案。
参考文献
https://www.cakesolutions.net/teamblogs/ways-to-pattern-match-generic-types-in-scala
【问题讨论】:
-
其实反之亦然。
TypeTags 完全在编译时生成,但可以将值传递给运行时。它们捕获有关泛型类型(以及更多)的信息,这些信息在运行时被 JVM 擦除。另一方面,虽然ClassTags 可以在编译时生成,但也可以在运行时生成它们。它们仅封装运行时可用的信息,因此它们中的泛型被删除,这就是您示例中的匹配失败的原因。 -
来自Scala doc:
ClassTags是TypeTags的一个较弱的特例,因为它们只包装给定类型的运行时类,而TypeTag包含所有静态类型信息.也就是说,ClassTags是由只知道一个类型的顶级类构成的,而不必知道它的所有参数类型。此运行时信息足以创建运行时数组。
标签: scala reflection scala-3 dotty