La macro siguiente, extraído de un ejemplo más extenso, se supone que crear un árbol con nada más que una referencia a this
:¿Cómo me refiero a adjuntar "esto" en una macro de Scala?
def echoThisImpl(c:Context): c.Expr[Any] = {
import c.universe._
val selfTree = This(c.enclosingClass.symbol)
c.Expr[AnyRef](selfTree)
}
def echoThis: Any = macro CallMacro.echoThisImpl
Pero una llamada a echoThis
como
object Testing extends App {
val thisValue = CallMacro.echoThis
println(thisValue)
}
falla al compilar , con el mensaje
[error] /home/rafael/dev/scala/goose/goose-macros/src/test/scala/Testing.scala:8: type mismatch;
[error] found : <noprefix>
[error] required: Any
[error] val thisValue = CallMacro.echoThis
Si fijo el -Ymacro-debug-lite marca el árbol generado es This(newTermName("<local Testing>"))
.
Gracias por responder Eugene. No fue suficiente para hacerme pasar. IIUC 'c.prefix' es una expresión para el árbol que hace referencia al' objeto' donde se define la macro. –
(continuación) 'This()' toma un símbolo, y creo que estoy buscando el símbolo que hace referencia a la clase adjunta de la macro llamada. Quiero la llamada 'def echo this: Cualquier = macro MacroImpl.echoThis' a ser el mismo que ' def echo this: Cualquier = this' –
Está bien que ver. Déjame pensar –