scala.reflect.api.Position和documentation 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(())))发布于 2016-08-15 14:40:48
每个非空位置都引用一个SourceFile和其内的三个字符偏移量:开始、结束和点。
因此,如果您没有通过解析某个SourceFile来获得树,那么它就没有任何位置。
https://stackoverflow.com/questions/38949321
复制相似问题