加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 更改函数实现而不是引用

发布时间:2020-12-16 18:16:23 所属栏目:安全 来源:网络整理
导读:我需要获得lambda函数实现的AST.而且我被卡住了,因为reify对论证起作用而不是它的价值. val x = (a: Int) = println("a")val t = showRaw(reify(thevalueof x)) //something here should changeprintln(t) 应该打印: Expr(Function(List(ValDef(Modifiers(P
我需要获得lambda函数实现的AST.而且我被卡住了,因为reify对论证起作用而不是它的价值.

val x = (a: Int) => println("a")
val t = showRaw(reify(thevalueof x)) //something here should change
println(t)

应该打印:

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"))))))

我认为应该有拼接的技巧,但我无法做到这一点.

解决方法

目前没有强大的方法可以在宏应用程序之外获取程序的AST(并且reify是一个宏,所以它遵守相同的规则).但是,我们正在尝试可能解决此问题的下一代宏引擎: http://scalamacros.org/news/2014/03/02/project-palladium.html.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读