3

我正在编写一个 Scala 宏并遍历树以查找类中的非私有字段。

考虑宏查看的这段代码:

class Foo {
  val bar: String = "test"
}

我正在遍历这段代码并到达bar's ValDef. 它的修饰符中只有两个标志:Flag.PRIVATEFlag.LOCAL.

使用private修饰符bar不会改变任何事情。使用protected修饰符只会添加Flag.PROTECTED到标志列表中。

我错过了什么?如何区分私有字段和公共字段?

编辑:

以下代码:

val bar: String = "test"

既没有Flag.PRIVATE也没有Flag.LOCAL,这是有道理的,因为它是一个“全球”公共 val。

我在里面工作的上下文是为wartremover编写一个新的 wart ,它只是Traverser在扩展宏并遍历代码块时从上下文的宇宙中获取一个。

4

1 回答 1

2

Scala 中的val定义扩展为private[this]带有额外 getter 的字段。除了ValDef您看到的之外,还应该有一个DefDef具有相同名称的附加方法定义,即字段上的 getter。

于 2017-02-11T13:07:46.937 回答