Scala反射库中是否有不推荐使用的enclosingClass方法的替代方法?

问题描述 投票:0回答:1

我正在编写一个宏以获取封闭的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 scala-macros
1个回答
1
投票

弃用原因

[从Scala 2.11.0开始,用于获取树的API,当前的宏应用程序已弃用,其原因是有两个方面。首先,我们想朝着本地扩展的宏,因为事实证明它对对代码的理解。其次,在目前的架构中scalac,我们无法使用c.enclosingTree样式的API稳健地。对类型检查器的必要更改将大大超出鉴于目前存在更紧迫的担忧。这有点与2.11期间宏的整体演变保持一致开发周期,我们在c.introduceTopLevelc.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

© www.soinside.com 2019 - 2024. All rights reserved.