使用scala.meta替换scala.reflect,ClassTags和TypeTags会发生什么?

时间:2016-10-10 11:51:36

标签: scala metaprogramming introspection scala-meta

或者这甚至是相关的吗?

我想到的是使用ClassTagTypeTag注释,如下所示:

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中是否有等价物?这将如何工作,并且擦除处理方式是否会有任何变化?

1 个答案:

答案 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()