如何在宏中获取Scala-macro-annotated类或对象的扩展类路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在宏中获取Scala-macro-annotated类或对象的扩展类路径?相关的知识,希望对你有一定的参考价值。

如果我编写了一个要应用于Scala对象或类的Scala宏,是否可以在宏中获取该带注释实体的扩展类路径? (我最终希望它作为一个字符串,由宏写入文件,原因。)

我需要该实体的封闭com.foo.bar包,或者直接从带注释的MyClass获取扩展的com.foo.bar.MyClass类路径的方法。

答案

好吧,不确定它是否是最好的方法,但是对我有用的解决方案是使用quasiquotes编译一个“探测”类,使用上下文:

import c.universe._ val probe = c.typecheck(q“”“{class $$$$ Pr0bE $$$$;()}”“”)

然后可以请求该“探测”的所有者,这是我的情况下的一个包,并跟随所有者到“root”,从那个和被注意者的名称构建annottee的完全限定的类路径。

以上是关于如何在宏中获取Scala-macro-annotated类或对象的扩展类路径?的主要内容,如果未能解决你的问题,请参考以下文章

在宏中传递变量 args 时出现语法错误

Symfony 3在宏中使用宏?

如何在宏中匹配 Rust 的“if”表达式?

如何从选定的 Excel 工作表单元格中在宏中添加时间戳

在宏中使用用户在表单中输入的信息

在宏中调用函数