我正在寫一個Scala宏,並遍歷樹來尋找類中的非私有字段。爲什麼這個公共字段有一個PRIVATE標誌?
考慮以下代碼,宏觀着眼於:
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寫了一個新的疣,當擴展宏並遍歷代碼塊時,它只需從上下文的Universe中獲取Traverser
。
你能分享你的代碼,以便我們可以玩嗎? – Dici
如果你願意,我可以創建一個repro,但是我使用的代碼只是從Universe中取出一個Traverser並在宏擴展期間在代碼上運行它。 –
@Dici我爲這個問題添加了更多信息和上下文。 HTH –