Tree
プログラム スニペットをキャプチャし、実行時に使用できるようにするマクロを作成したいと考えています。基本的に、の機能が必要ですreify
が、別の構文に埋め込んでいます。コンパニオン オブジェクトを呼び出しapply
、いくつかのコードを提供し、提供されたコードを新しく作成された Workload オブジェクトのメンバーに格納したいと考えています。Workload
Tree
val wl = Workload {
// some code ...
}
wl.tree // Tree of 'some code'
残念ながら、reify
マクロなので転送できません。に似た独自のマクロを作成する必要があると思いreify
ます。Tree
しかし、マクロから aを返す方法がわかりません。ソースにreify
は、ハードワイヤードな実装が言及されているだけです。
これはどのように達成できますか?
アップデート
私の要点を強調するために小さな例を書きました
import scala.reflect.runtime.universe._
object MacroFun {
import scala.reflect.macros.blackbox.Context
import scala.language.experimental.macros
def getSomeTree: Expr[Unit] = macro getTreeImpl
def getTreeImpl(c: Context): c.Expr[Expr[Unit]] = {
import c.universe._
val expr = reify {
println("Hello World!")
}
???
}
}
欠けている唯一のものは、に変わる方法expr
ですc.Expr[Expr[Unit]]