如何获得给定 Ident 的树?

How do I get a Tree given an Ident?

假设我从中提取了 lhstperhs

q"$mods val $lhs: $tpe = $rhs"

现在,tpe 是一个 Ident。如何获取此ident对应的Tree(或Type)对象?

Ident是一棵代表名字的树,类型通过typechecking赋值

scala> import reflect.runtime._,universe._,tools.reflect._
import reflect.runtime._
import universe._
import tools.reflect._

scala> val t = q"val i: Int = 42"
t: reflect.runtime.universe.ValDef = val i: Int = 42

scala> val q"val $x: $what = $rhs" = t
x: reflect.runtime.universe.TermName = i
what: reflect.runtime.universe.Tree = Int
rhs: reflect.runtime.universe.Tree = 42

scala> showRaw(what)
res1: String = Ident(TypeName("Int"))

scala> val tb = currentMirror.mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@27d5a580

scala> val v = tb.typecheck(t)
v: tb.u.Tree = val i: Int = 42

scala> v.children.head.tpe
res2: tb.u.Type = Int