2016-10-10 28 views
1

或者這甚至是相關的?用scala.meta替換scala.reflect,ClassTags和TypeTags會發生什麼?

我心目中是使用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

目前scala.meta不提供運行時反思,但是,這是計劃在未來的版本。 API類似於scala.reflect(但是按照scala.meta,例如不同的Abstract Syntax Trees,沒有暴露的編譯器內部等),並且我真的希望最終用戶看不到太多的區別。

因此,ClassTag/TypeTag的功能不可能消失。最有可能的是,scala.meta將使用橋接器(paradise)訪問scalac內部結構(涉及scala.reflect)。

另請注意,scala.reflect將支持scala 2.x分支,但不支持dotty