Я просто начать работу с макросами и чувствую, что я что-то действительно болезненно очевидное не хватает ...Scala макрос инспектировать дерево для анонимной функции
Я хочу, чтобы проверить AST для анонимного лямбда-функции передается мой макро, в конечном итоге я хочу что-то сделать, но я упал на первое препятствие.
Мой код выглядит следующим образом;
object Test extends App {
doIt(() => "bar")
def doIt(f:() => String) = {
Builder.build(f)
}
}
object Builder {
def build[R](func:() => R): String = macro builder_impl[R]
def builder_impl[R](c: blackbox.Context)(func: c.Expr[() => R]): c.Expr[String] = {
import c.universe._
println(showRaw(func))
reify {
println("hello yeah")
"foo"
}
}
}
Я ожидаю showRaw, чтобы напечатать что-то вроде;
Expr(Function(List(), Literal(Constant("bar"))))
Однако вместо этого я получаю;
Expr(Ident(TermName("f")))
я могу получить то, что я хочу, определив свою анонимную функцию на месте вызова, чтобы Builder.build как это;
Builder.build(() => "bar")
Однако это не помогает мне делать то, что мне нужно.
Может кто-нибудь объяснить, что я не понимаю, как я могу достичь своей цели?
Кроме того, есть ли какая-нибудь удивительная кулинарная книга Scala, которую я должен прочитать?
С уважением,
Ryan.