6
パターンマッチでマクロに引数を使用する方法はありますか?マクロ、スプライス、パターンマッチング
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 XX = X.splice
しかし、いずれかのスプライスでは動作しませんもちろん:通常、1のような、最初のvalに割り当てることによって、これを解決するだろう。
を持っていますが、私は構築した場合、それがうまくいきます手作業で樹木を樹立することはできませんか? –
btw、これはもうc.typeCheckの回避策を使用しなければならないバグでしょうか? –
はい、手動の木構造で動作します。 typecheckと言えば、現在これは既知の問題です。私はバグがあるかどうかはわかりませんが、それは間違いなく私が修正したいことです。 –