Следующий макрос, извлеченный из более крупного примера, должен создать дерево, не содержащее ничего, кроме ссылки на this
:
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
Но вызов echoThis
, например
object Testing extends App {
val thisValue = CallMacro.echoThis
println(thisValue)
}
не удается скомпилировать, с сообщением
[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
Если я установил флаг -Ymacro-debug-lite, сгенерированное дерево будет This(newTermName("<local Testing>"))
.