首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala反射为什么在reify树上使用NoPosition?

Scala反射为什么在reify树上使用NoPosition?
EN

Stack Overflow用户
提问于 2016-08-15 12:27:42
回答 1查看 26关注 0票数 0

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

在下面的代码中,为什么符号、项、常量都有NoPosition?

代码语言:javascript
复制
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(())))
EN

回答 1

Stack Overflow用户

发布于 2016-08-15 14:40:48

每个非空位置都引用一个SourceFile和其内的三个字符偏移量:开始、结束和点。

因此,如果您没有通过解析某个SourceFile来获得树,那么它就没有任何位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38949321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档