有没有办法在模式匹配中对宏使用参数?我想这样做:
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
但是,当然,这对拼接也不起作用。
最佳答案
不幸的是,目前尚不可能(并且在2.10.0-final中将无法实现),但是我们正在进行一些工作,可能会在以后的版本发布中有所帮助:)
关于scala - 宏,拼接和模式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12638293/