2016-10-10 9 views
1

これは関連性がありますか?scala.reflectの代わりにscala.metaを使用すると、ClassTagsとTypeTagsはどうなりますか?

私が考えていることはそうのように、ClassTagまたはTypeTag注釈を使用している:あなたが見ることができるように、TypeTagがどのコンパイラによって見られている

f: [T](ls: List[T])(implicit evidence$1: reflect.runtime.universe.TypeTag[T])String 

:中

scala> 
import scala.reflect.runtime.universe.TypeTag 

def f[T : TypeTag](ls : List[T]) : String = { 
    ??? 
} 

結果暗黙の引数を追加します。 scala.metaに相当するものはありますか?これはどのように機能し、消去が処理される方法に変更がありますか?

答えて

1

現在、scala.metaは実行時イントロスペクションを提供していませんが、将来のリリースで使用する予定です。 APIはscala.reflectに似ています(ただし、scala.metaという意味で、別のAbstract Syntax Trees、公開されていないコンパイラの内部などはありません)。

したがって、ClassTag/TypeTagの機能は消えない可能性があります。ほとんどの場合、scala.metascalacの内部(およびそれにはscala.reflectを含む)へのアクセスにブリッジ(paradise)を使用します。

scala.reflectは、scala 2.xブランチでサポートされますが、dottyではサポートされません。

関連する問題