2012-09-28 22 views
6

Kalıp eşlemesinde bir makroya argüman kullanmanın bir yolu var mı?makro, ek ve desen eşleme

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)) 
} 

Ama ne yazık ki derleyici diyor "kararlı tanımlayıcı zorunlu değildir, ancak X.splice bulundu": Bunu yapmak istiyorum.

val XX = X.splice 

Ama her iki ek yeri ile çalışmıyor tabii: Normalde, bir gibi ilk önce bir val için atayarak bu çözecek.

cevap

2

Ne yazık ki şu anda mümkün değildir (ve 2.10.0 finalde mümkün olmayacaktır), ama biz daha sonraki nokta bültenleri :)

+0

ama inşa eğer çalışacak yardımcı olabilecek eserlerinde şey var Ağaç el ile (yani reify olmadan)? –

+0

btw, c.typeCheck-geçici çözümünü tekrar kullanmam gereken bir hata mı? –

+1

evet, manuel ağaç yapısıyla çalışırdı. typecheck konuşma, şu anda bu bilinen bir sorundur. Bunun için bir hatam olup olmadığını bilmiyorum, ama kesinlikle düzeltmek istediğim bir şey. –