2

Scala マクロを定義するときに、Symbol または Type から Tree に移動する方法はありますか?

具体的には、コンパニオン オブジェクトでリテラルを検索するシナリオです。

scala コードでは、これは次のようになります。

class Fred(a: String)

object Fred {
  val FredDescription = "hello"
}

マクロでは、Fred の WeakTypeTag にアクセスでき、それを使用してコンパニオンとその型シグネチャにアクセスできます。

context.universe.weakTypeOf[A].typeSymbol.companionSymbol.typeSignature

しかし、リテラルまたはツリーにアクセスしてコンパニオン オブジェクトのリテラルを一致させる方法がわかりません。

これは可能ですか?任意のタイプまたはシンボルのツリーを取得するトリックはありますか?

4

1 に答える 1

2

マクロを呼び出すのと同じファイルでタイプが定義されている場合など、これが可能な場合もありますが、一般的にはそうではないと思います。

これは、検査している型またはシンボルが既にコンパイルされたクラスファイルに由来している可能性があるためです。このような状況では、探しているツリーは存在しません。

于 2014-03-02T12:24:05.053 に答える