scala – 用于在运行时访问函数源代码的宏
发布时间:2020-12-16 18:12:49 所属栏目:安全 来源:网络整理
导读:使用 Scala宏我想访问函数f的源代码. 这是我的问题的简化示例: def logFImplementation(f: = Boolean) { val sourceCodeOfF: String = ... // -- how to get source code of f?? println("Scala source of f=" + sourceCodeOfF)} 因此对于: logFImplementa
使用
Scala宏我想访问函数f的源代码.
这是我的问题的简化示例: def logFImplementation(f: => Boolean) { val sourceCodeOfF: String = ... // <-- how to get source code of f?? println("Scala source of f=" + sourceCodeOfF) } 因此对于: logFImplementation { val i = 5; List(1,2,3); true } 它应该打印: Scala source of f=val i: Int = 5; immutable.this.List.apply[Int](1,3); true (现在我测试了Macro to access source code text at runtime,它适用于{val i = 5; List(1,3); true} .logValueImpl但是对于f.logValueImpl它只打印f.) 谢谢你的建议. 解决方法
我严重怀疑这是可能的.
首先,宏是编译时的事情.他们所做的只是转换程序所包含的抽象语法树.这正是你能够做{val i = 5;清单(1,3); true} .logValueImpl:AST就在这里,因此将其打印为字符串没有任何困难.但是宏无法解析运行时值,因为运行时没有宏. 其次,绝对没有理由相信f是Scala代码.我可以像这样从Java调用你的函数(不确定我的名字是否正确,但是这个想法仍然是相同的): someObject.logFImplementation(new scala.Function0<Boolean>() { @Override public Boolean apply() { // do some things in Java } }); (这是可能的,因为内部按名称调用参数转换为scala.Function0对象).在这种情况下,您希望您的功能打印什么? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在Angular 2中解析app组件的正确方法
- Angular中的非Singleton服务
- 无法使用Angular 2 rc5发出http请求
- 为什么在Angular 2服务中调用此方法/ gettor X次
- bash – 如何拆分文件并且并行处理它们,然后将它们缝合回来
- twitter-bootstrap – AngularJS:表单内的所有按钮触发器提
- 基于Bootstrap的Metronic框架实现条码和二维码的生成及打印
- 浅谈WebService SOAP、Restful、HTTP(post/get)请求
- 有角度 – “哑”应该是哑的组件吗?
- Bootstrap弹出层model上自定义的弹出层中input输入框失效,