获取ToolBox.parse后的类型信息



如何找到从ToolBox.parse返回的树的类型(子树)?

例如,给定一个源文件Test。Scala包含以下内容:

val a = 7                   // exp1
val b = 12.0                // exp2
var c = "hello"             // exp3
val d = someFn( 9 )         // exp4

我希望能够从"树"中查询exp1-4的类型:

val sourceCode = io.Source.fromFile( "Test.scala" ).mkString
val tree = toolBox.parse( sourceCode )

我理解如何使用遍历器访问树节点:问题是如何找到以这种方式获得的树的类型

看起来您需要在从toolbox.parse返回的树上调用toolbox.typeCheck

parse返回的树不包含类型信息,之后需要使用typecheck:

object ToolBoxTest extends App {
  import scala.reflect.runtime.universe.runtimeMirror
  import scala.tools.reflect.ToolBox
  val tb = runtimeMirror(getClass().getClassLoader()).mkToolBox()
  import tb._, u._
  val tree = typecheck(parse("""
    val a = 7                   // exp1
    val b = 12.0                // exp2
    var c = "hello"             // exp3
  """))
  new Traverser() {
    override def traverse(t: Tree) = {
      t match {
        case v: ValDef =>
          println(v.tpt)
        case t =>
          super.traverse(t)
      }
    }
  }.traverse(tree)
}
这个打印

Int
Double
String

相关内容

  • 没有找到相关文章

最新更新