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

时间:2017-02-10 22:31:05

标签: scala scala-macros scala-reflect scala-macro-paradise

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

考虑宏看到的代码:

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

我遍历此代码并转到bar ValDef。它的修饰符中只有两个标志:Flag.PRIVATEFlag.LOCAL

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

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

修改

以下代码:

val bar: String = "test"

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

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

1 个答案:

答案 0 :(得分:2)

Scala中的error: invalid cast from type 'CryptoPP::Integer' to type 'int' 定义会扩展为带有额外getter的val字段。除了您private[this]之外,还应该有一个额外的ValDef方法定义,其名称与该字段上的getter相同。