我正在编写 Scala 宏并遍历树以查找类中的非私有(private)字段。
考虑宏查看的这段代码:
class Foo {
val bar: String = "test"
}
我正在遍历这段代码并到达 bar
的 ValDef
。它的修饰符中只有两个标志:Flag.PRIVATE
和 Flag.LOCAL
。
在 bar
上使用 private
修饰符没有任何改变。使用 protected
修饰符只会将 Flag.PROTECTED
添加到标志列表中。
我错过了什么?如何区分私有(private)字段和公共(public)字段?
编辑:
以下代码:
val bar: String = "test"
既没有 Flag.PRIVATE
也没有 Flag.LOCAL
,这是有道理的,因为它是一个“全局”公共(public) val。
我在里面工作的上下文正在为 wartremover 写一个新的疣,当扩展宏并遍历代码块时,它只是从上下文的 universe 中获取一个 Traverser
。
最佳答案
Scala 中的 val
定义扩展为带有附加 getter 的 private[this]
字段。除了您看到的 ValDef
之外,应该还有一个具有相同名称的附加 DefDef
方法定义,它是字段上的 getter。
关于scala - 为什么这个公共(public)字段有一个 PRIVATE 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169697/