或者这甚至是相关的吗?
我想到的是使用ClassTag
或TypeTag
注释,如下所示:
scala>
import scala.reflect.runtime.universe.TypeTag
def f[T : TypeTag](ls : List[T]) : String = {
???
}
结果:
f: [T](ls: List[T])(implicit evidence$1: reflect.runtime.universe.TypeTag[T])String
正如您所看到的,编译器会看到TypeTag
,它会添加一个隐式参数。 scala.meta
中是否有等价物?这将如何工作,并且擦除处理方式是否会有任何变化?
答案 0 :(得分:1)
目前,scala.meta
没有提供运行时内省,而是计划在将来的版本中使用。 API类似于scala.reflect
(但就scala.meta
而言,例如不同的Abstract Syntax Trees
,没有暴露的编译器内部等等),我真的希望最终用户看不到太多差异。< / p>
因此,ClassTag/TypeTag
的功能不太可能消失。最有可能的是,scala.meta
将使用网桥(paradise
)来访问scalac
内部(这涉及scala.reflect
)。
另请注意,scala.reflect
分支机构将支持scala 2.x
,但dotty
不支持update()
。