Ing*_*das 5 reflection macros scala scala-2.10
我需要获得lambda函数实现的AST.而且我被卡住了,因为reify对论证起作用而不是它的价值.
val x = (a: Int) => println("a")
val t = showRaw(reify(thevalueof x)) //something here should change
println(t)
Run Code Online (Sandbox Code Playgroud)
应该打印:
Expr(Function(List(ValDef(Modifiers(PARAM), newTermName("a"), Ident(scala.Int), EmptyTree)), Apply(Select(Select(This(newTypeName("scala")), newTermName("Predef")), newTermName("println")), List(Literal(Constant("a"))))))
Run Code Online (Sandbox Code Playgroud)
我认为应该有拼接的技巧,但我无法做到这一点.
目前没有强大的方法可以在宏应用程序之外获取程序的AST(并且reify是一个宏,所以它遵守相同的规则).但是,我们正在尝试可能解决此问题的下一代宏引擎:http://scalamacros.org/news/2014/03/02/project-palladium.html.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |