我正在编写一个宏以获取封闭的val/var
定义。我可以获得封闭的val/var
符号,但无法获取定义树。建议使用enclosingClass
作为一种解决方案:https://stackoverflow.com/a/18451114/11989864但是不推荐使用所有封闭树样式的API:https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/macros/blackbox/Context.html有没有办法实现enclosingClass
的功能?还是要从符号中得到一棵树?
弃用原因
[从Scala 2.11.0开始,用于获取树的API,当前的宏应用程序已弃用,其原因是有两个方面。首先,我们想朝着本地扩展的宏,因为事实证明它对对代码的理解。其次,在目前的架构中scalac,我们无法使用
c.enclosingTree
样式的API稳健地。对类型检查器的必要更改将大大超出鉴于目前存在更紧迫的担忧。这有点与2.11期间宏的整体演变保持一致开发周期,我们在c.introduceTopLevel
和c.introduceMember
,但最终决定拒绝他们。[如果您依赖现在不推荐使用的API,请考虑使用新的可用于获取名称的
c.internal.enclosingOwner
方法封闭定义。或者尝试重新格式化宏就完全本地扩张而言...
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/macros/Enclosures.html
关于从符号获取树
没有从符号到定义树的标准方法
https://stackoverflow.com/a/13768595/5249621
您为什么需要def宏来获取封闭的val
/ var
定义?
也许宏注释就足够了https://docs.scala-lang.org/overviews/macros/annotations.html