【发布时间】:2024-01-22 17:59:01
【问题描述】:
如果我编写了一个将应用于 Scala 对象或类的 Scala 宏,是否可以在宏中获取该注释实体的扩展类路径? (出于某种原因,我最终希望它作为一个字符串由宏写入文件。)
我需要包含该实体的 com.foo.bar 包,或者需要一种从带注释的 MyClass 中直接获取扩展的 com.foo.bar.MyClass 类路径的方法。
【问题讨论】:
如果我编写了一个将应用于 Scala 对象或类的 Scala 宏,是否可以在宏中获取该注释实体的扩展类路径? (出于某种原因,我最终希望它作为一个字符串由宏写入文件。)
我需要包含该实体的 com.foo.bar 包,或者需要一种从带注释的 MyClass 中直接获取扩展的 com.foo.bar.MyClass 类路径的方法。
【问题讨论】:
嗯,不确定这是否是最好的方法,但对我有用的解决方案是使用准引号,使用上下文编译一个“探针”类:
导入 c.universe._ val probe = c.typecheck(q"""{class $$$$Pr0bE$$$$; () }""")
然后可以询问那个“探针”的所有者,在我的例子中是一个包,然后跟随所有者到“根”,根据它和被注释者的名字构造被注释者的完全限定类路径。
【讨论】: