2016-08-15 17 views
0

scala.reflect.api.Position和文档Annotations, Names, Scopes, and More没有给出足够的解释,说明为什么树或符号可能具有NoPosition的位置。斯卡拉反思为什么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(()))) 

回答

0

每个非空位置指的SourceFile并在其中三个字符的偏移量:开始,结束,和点。

所以,如果你不解析一些SourceFile得到一棵树,它没有任何职位。