我正在编写一个Scala宏并且正在遍历树以查找类中的非私有字段。
考虑宏看到的代码:
class Foo {
val bar: String = "test"
}
我遍历此代码并转到bar
ValDef
。它的修饰符中只有两个标志:Flag.PRIVATE
和Flag.LOCAL
。
在private
上使用bar
修饰符不会改变任何内容。使用protected
修饰符只会将Flag.PROTECTED
添加到标记列表中。
我错过了什么?如何区分私人和公共领域?
修改
以下代码:
val bar: String = "test"
既没有Flag.PRIVATE
也没有Flag.LOCAL
,这是有道理的,因为它是一个全球性的'公共val。
我在内部工作的背景是为wartremover编写一个新的wart,它只是在扩展宏并遍历块时从上下文的Universe中获取Traverser
代码。
答案 0 :(得分:2)
Scala中的error: invalid cast from type 'CryptoPP::Integer' to type 'int'
定义会扩展为带有额外getter的val
字段。除了您private[this]
之外,还应该有一个额外的ValDef
方法定义,其名称与该字段上的getter相同。