2012-09-28 12 views
6

Czy istnieje sposób użycia argumentu do makra w dopasowaniu wzorca? Chciałbym to zrobić:makra, splicing i dopasowywanie wzorca

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

Niestety, kompilator mówi "wymagany identyfikator stały, ale znaleziono X.splice". Normalnie można by rozwiązać ten problem poprzez przypisanie do val pierwsze, takie jak:

val XX = X.splice 

Ale oczywiście, że nie działa ze splotu albo.

Odpowiedz

2

Niestety nie jest to możliwe w tej chwili (a nie będzie możliwe w 2.10.0-final), ale mamy coś w pracach, które mogą pomóc w kolejnych wydaniach punktowych :)

+0

ale to działa, jeśli zbudowana drzewo ręcznie (tj. bez reify)? –

+0

btw, czy jest to błąd, który muszę ponownie użyć tutaj c.typeCheck-workaround? –

+1

tak, to będzie działać z ręczną konstrukcją drzewa. Mówiąc o typecheck, obecnie jest to znany problem. Nie wiem, czy mamy na to jakiś błąd, ale to zdecydowanie coś, co chciałbym naprawić. –

Powiązane problemy