【问题标题】:How to get the extended classpath of a Scala-macro-annotated class or object, in the macro?如何在宏中获取 Scala-macro-annotated 类或对象的扩展类路径?
【发布时间】:2024-01-22 17:59:01
【问题描述】:

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

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

【问题讨论】:

    标签: scala macros


    【解决方案1】:

    嗯,不确定这是否是最好的方法,但对我有用的解决方案是使用准引号,使用上下文编译一个“探针”类:

    导入 c.universe._ val probe = c.typecheck(q"""{class $$$$Pr0bE$$$$; () }""")

    然后可以询问那个“探针”的所有者,在我的例子中是一个包,然后跟随所有者到“根”,根据它和被注释者的名字构造被注释者的完全限定类路径。

    【讨论】:

      最近更新 更多