Sadece makrolar ile başladı ve gerçekten acı belirgin bir şey eksik gibi hissediyorum alıyorum için ağaç incelemek benim Makro, sonuçta ona bir şeyler yapmak istiyorum ama ilk engele düştüm.Scala makro <p></p> Ben geçirilen anonim lambda fonksiyonu için AST incelemek istiyorum ... anonim fonksiyonu
Kodum şunun gibi görünüyor;
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 gibi bir şey yazdırmayı bekliyorum; Bununla birlikte, bunun yerine;
Expr(Ident(TermName("f")))
ben böyle Builder.build çağrı yerinde benim anonim işlev tanımlayarak istediğini elde edebilirsiniz;
Builder.build(() => "bar")
Ancak, ihtiyacım olanı yapmama yardımcı olmuyor.
Bazıları lütfen yanlış anlamadığım şeyi açıklayabilir, hedefime nasıl ulaşabilirim?
Ayrıca okumam gereken harika bir Scala makro yemek kitabı var mı?
Saygılarımızla,
Ryan.