Ho la seguente macro definisce una classe e il ritorno un'istanza di quella classe (con Scala 2.10.2 e il plugin macro):metodo non può essere letta in classe generata Macro
def test[T] = macro testImpl[T]
def testImpl[T : c.WeakTypeTag](c: Context): c.Expr[Any] = {
import c.universe._
val className = newTypeName("Test")
c.Expr { q"""
class $className {
def method = 1
}
new $className
"""}
}
Quando chiamo la macro :
case class Cat(name: String)
val t = test[Cat].method
ottengo il seguente errore:
method method in class Test cannot be accessed in Test
val t = test[Cat].method
^
il mio obiettivo generale è quello di utilizzare vampire methods e usare le virgolette per descrivere la classe generata. Come posso risolvere questo errore?
La tua classe sintetizzata non può estendere un tratto che definisce "metodo" in modo astratto? –
No perché ho bisogno di generare quei metodi con nomi specifici. E nel tentativo di farlo mi sono reso conto che non potevo nemmeno accedere ai metodi non generati. Sospetto che non sto usando le virgolette in modo corretto qui. – Eric
Non avevo idea che ora esistesse un plug-in per il compilatore per macro paradise (al contrario di essere costretto a usare un compilatore a forcella). Se solo per l'apprendimento, grazie mille per la tua domanda. –