2

Treeプログラム スニペットをキャプチャし、実行時に使用できるようにするマクロを作成したいと考えています。基本的に、の機能が必要ですreifyが、別の構文に埋め込んでいます。コンパニオン オブジェクトを呼び出しapply、いくつかのコードを提供し、提供されたコードを新しく作成された Workload オブジェクトのメンバーに格納したいと考えています。WorkloadTree

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]]

4

1 に答える 1