これは私が直面している問題の単純化されたバージョンですが、根本的な問題は残っています。マクロを呼び出した後、ケース クラスを動的に生成したいと考えています。マクロ呼び出しなどからパラメーターを取得できます。問題は、準引用符内で文字列変数を使用しようとすることです。私は基本的に次のことを望んでいます:
def expand_impl(c: Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
import c.universe._
val toGen = "case class Foo()"
val toReturn = c.Expr[Any](
q"$toGen"
)
toReturn
}
ただし、ケース クラスは生成されません。toGen を q"case class Foo()" に変更すると機能することがわかりましたが、 toGen は、文字列を返す他の処理の後に生成する文字列であるため、それを行うことはできません。このようにコンパイルし、toReturn の値を手動で確認すると、次のようになります。
Expr[Any]("case class Foo()")
文字列 toGen は、引用符に沿って単純に貼り付けられます。つまり、ケース クラスは生成されません。
同様の問題を探しましたが、この例はどこにも見つかりません。準引用符内の文字列変数の二重引用符を外すにはどうすればよいですか?