![](/img/trans.png)
[英]Does it make sense to have a `private` constructor field in a `case class`?
[英]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
添加到标志列表中。
我错过了什么? 如何区分私人和公共领域?
编辑:
以下代码:
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.