Gibt es eine Möglichkeit, ein Argument für ein Makro in einer Musterübereinstimmung zu verwenden? Ich möchte, dies tun:Makros, Spleiß und Mustervergleich
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))
}
Aber leider ist die Compiler sagt „stabile Kennung erforderlich, aber X.splice gefunden“. Normalerweise würde man dies löst Erste, der eine val durch die Zuordnung, wie zB:
val XX = X.splice
Aber das ist natürlich nicht mit Spleiß entweder nicht funktioniert.
aber es funktionieren würde, wenn ich gebaut der Baum manuell (dh ohne zu verifizieren)? –
BTW, ist es ein Fehler, dass ich die c.typeCheck-Problemumgehung hier wieder verwenden muss? –
Ja, es würde mit der manuellen Baumkonstruktion funktionieren. Wenn man von Typcheck spricht, ist dies zur Zeit ein bekanntes Problem. Ich weiß nicht, ob wir dafür einen Bug haben, aber das möchte ich definitiv beheben. –