为什么这个 public 字段有一个 PRIVATE 标志?
Why does this public field have a PRIVATE flag?
我正在编写 Scala 宏并遍历树以查找 类 中的非私有字段。
考虑宏查看的这段代码:
class Foo {
val bar: String = "test"
}
我正在遍历此代码并到达 bar
的 ValDef
。它的修饰符中只有两个标志:Flag.PRIVATE
和 Flag.LOCAL
.
在 bar
上使用 private
修饰符没有任何改变。使用 protected
修饰符只会将 Flag.PROTECTED
添加到标志列表中。
我错过了什么?如何区分私有字段和 public 字段?
编辑:
以下代码:
val bar: String = "test"
既没有 Flag.PRIVATE
也没有 Flag.LOCAL
,这是有道理的,因为它是 'global' public val.
我在其中工作的上下文正在为 wartremover 编写一个新的 wart,它在扩展宏并遍历代码块时仅从上下文的 universe 中获取 Traverser
。
Scala 中的一个 val
定义扩展为一个 private[this]
字段和一个额外的 getter。除了您看到的 ValDef
之外,应该还有一个具有相同名称的附加 DefDef
方法定义,即字段上的 getter。
我正在编写 Scala 宏并遍历树以查找 类 中的非私有字段。
考虑宏查看的这段代码:
class Foo {
val bar: String = "test"
}
我正在遍历此代码并到达 bar
的 ValDef
。它的修饰符中只有两个标志:Flag.PRIVATE
和 Flag.LOCAL
.
在 bar
上使用 private
修饰符没有任何改变。使用 protected
修饰符只会将 Flag.PROTECTED
添加到标志列表中。
我错过了什么?如何区分私有字段和 public 字段?
编辑:
以下代码:
val bar: String = "test"
既没有 Flag.PRIVATE
也没有 Flag.LOCAL
,这是有道理的,因为它是 'global' public val.
我在其中工作的上下文正在为 wartremover 编写一个新的 wart,它在扩展宏并遍历代码块时仅从上下文的 universe 中获取 Traverser
。
Scala 中的一个 val
定义扩展为一个 private[this]
字段和一个额外的 getter。除了您看到的 ValDef
之外,应该还有一个具有相同名称的附加 DefDef
方法定义,即字段上的 getter。