繁体   English   中英

为什么这个公共字段有一个PRIVATE标志?

[英]Why does this public field have a PRIVATE flag?

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

考虑宏看到的代码:

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

我正在遍历这段代码并进入barValDef 它的修饰符中只有两个标志: Flag.PRIVATEFlag.LOCAL

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

我错过了什么? 如何区分私人和公共领域?

编辑:

以下代码:

val bar: String = "test"

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM