TypeRef
の特定のケースですType
:
abstract type TypeRef >: Null <: Universe.TypeRefApi with Universe.Type
Type
aが実際に a であるかどうかはTypeRef
、パターン マッチングで確認できます。
tpe match {
case TypeRef(prefix, sym, args) =>
// or alternately
case typeRef: TypeRef =>
}
TypeTag[A]
Type
は、 1) さまざまなミラーで機能するものにアクセスする方法です。2) 型パラメータからコンパイラによって自動的に生成できます (Type
ジェネリックではないことに注意してください)。
に変換するType
にTypeTag
は、TypeTag を手動で作成するには? :
import scala.reflect.runtime.universe._
def typeToTypeTag[T](
tpe: Type,
mirror: reflect.api.Mirror[reflect.runtime.universe.type]
): TypeTag[T] = {
TypeTag(mirror, new reflect.api.TypeCreator {
def apply[U <: reflect.api.Universe with Singleton](m: reflect.api.Mirror[U]) = {
assert(m eq mirror, s"TypeTag[$tpe] defined in $mirror cannot be migrated to $m.")
tpe.asInstanceOf[U#Type]
}
})
}