1

或者这甚至相关吗?

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

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

4

1 回答 1

1

目前scala.meta不提供运行时自省,但计划在未来的版本中使用。API 将类似于scala.reflect(但在scala.meta例如不同Abstract Syntax Trees、没有暴露的编译器内部等方面),我真的希望最终用户不会看到太大的差异。

因此, 的功能ClassTag/TypeTag不太可能消失。最有可能的是,scala.meta将使用桥(paradise)来访问scalac内部(这涉及到scala.reflect)。

另请注意,scala.reflect将在scala 2.x分支中支持,但在dotty.

于 2016-10-11T10:37:22.510 回答