Сглаживание типов в отражении Scala
Как я могу разрешить псевдонимы с учетом Type
? Т.е.
import reflect.runtime.universe._
type Alias[A] = Option[Option[A]]
val tpe = typeOf[Alias[_]]
val ExistentialType(quantified, underlying) = tpe
Как я могу получить Option[Option[_$1]]
от underlying
(или из tpe
)? я знаю это typeSymbol
разрешает псевдонимы, но, похоже, теряет параметры в процессе:
scala> val tT = typeOf[Alias[_]].typeSymbol
tT: reflect.runtime.universe.Symbol = class Option
scala> tT.asType.toType
res3: reflect.runtime.universe.Type = Option[A]
scala> tT.asType.typeParams
res4: List[reflect.runtime.universe.Symbol] = List(type A)
1 ответ
Решение
Метод оказывается вызванным normalize
в 2.10 (устарело и dealias
добавлено в 2.11). Не знаю, как мне удалось пропустить это во время моего первого поиска.