Scala反思为什么NoPosition在reification树上?

时间:2016-08-15 04:27:42

标签: scala reflection

scala.reflect.api.Position和文档Annotations, Names, Scopes, and More没有充分解释为什么树或符号可以作为NoPosition的位置。

在下面的代码中,符号,术语,常量都有NoPosition的原因是什么?

import scala.reflect.runtime.universe._

def movieTree = reify {
  final class Movie {
    val year = 1998
    def name = "You've Got Mail"
  }
}.tree

showRaw(movieTree, printPositions = true)

// res0: String = [NoPosition]Block(
// List([NoPosition]ClassDef(Modifiers(FINAL), TypeName("Movie"), List(),
// [NoPosition]Template(List([NoPosition]Ident(TypeName("AnyRef"))), noSelfType,
// List([NoPosition]DefDef(Modifiers(), termNames.CONSTRUCTOR, List(), List(List()),
// [NoPosition]TypeTree(), 
// [NoPosition]Block(List([NoPosition]Apply([NoPosition]Select([NoPosition]Super([NoPosition]This(typeNames.EMPTY), typeNames.EMPTY), 
// termNames.CONSTRUCTOR), List())), [NoPosition]Literal(Constant(())))), 
// [NoPosition]ValDef(Modifiers(), TermName("year"), [NoPosition]TypeTree(), [NoPosition]Literal(Constant(1998))),
// [NoPosition]DefDef(Modifiers(), TermName("name"), List(), List(), [NoPosition]TypeTree(),
// [NoPosition]Literal(Constant("You've Got Mail"))))))),
// [NoPosition]Literal(Constant(())))

1 个答案:

答案 0 :(得分:0)

  

每个非空位置都指向SourceFile和其中的三个字符偏移:start,end和point。

因此,如果您通过解析某些SourceFile来获取树,则它没有任何位置。