私はScalaマクロを作成しており、クラス内の非プライベートフィールドを見つけるためにツリーをトラバースしています。私はこのコードを横断してbar
のValDef
に取得していますこのパブリックフィールドにPRIVATEフラグが設定されているのはなぜですか?
class Foo {
val bar: String = "test"
}
:
はでマクロが見えるこのコードを考えてみましょう。修飾子には、Flag.PRIVATE
と
Flag.LOCAL
という2つのフラグしかありません。
private
修飾子を使用すると、bar
は変更されません。 protected
修飾子を使用すると、フラグリストにFlag.PROTECTED
が追加されます。
私には何が欠けていますか?民間と公共のフィールドを区別するにはどうすればよいですか?
編集:
次のコード:
val bar: String = "test"
それは 'グローバル' のパブリックヴァルだから理にかなっている、Flag.PRIVATE
もFlag.LOCAL
もありません。
私が働いている文脈は、wartremoverの新しい疣贅を書いています。これは、マクロを拡張してコードブロックを横断するときに文脈の世界からを単に受け取ります。
あなたのコードを共有して、そのコードで遊ぶことができますか? – Dici
私は好きな人でreproを作成することができますが、私が使用するコードは、単純にTraverserをユニバースから取り出し、マクロ展開時にコード上で実行するというものです。 –
@Dici質問に情報と文脈を追加しました。 HTH –