パターンマッチでマクロへの引数を使用する方法はありますか? 私はこれをしたいと思います:
def extr(X:AnyRef) = macro extrImpl
def extrImpl(c:Context)(X:c.Expr[AnyRef]):c.Expr[AnyRef] = {
import c.universe._
val tree = reify {
new {
def unapply(x:String):Option[String] = x match {
case X.splice => Some(x) //error
case _ => None
}
}
}.tree
c.Expr(c.typeCheck(tree))
}
しかし残念ながら、コンパイラは「安定した識別子が必要ですが、X.splice が見つかりました」と言っています。通常、次のように最初に val に代入することでこれを解決します。
val XX = X.splice
もちろん、それはスプライスでも機能しません。