是否可以使用反射或类似方法识别/使用Scala宏?

是否可以使用反射或类似方法识别/使用Scala宏?,scala,reflection,macros,scala-macros,Scala,Reflection,Macros,Scala Macros,我知道Scala宏不能在与宏本身在同一编译运行中编译的代码中引用 我还从经验测试中了解到,如果一个人有这样做的代码库(引用同一项目中的宏),如果删除对宏的引用,编译代码,重新插入对宏的引用,再次编译代码,第二次编译将成功,宏生成的代码将正常工作。我假设这是因为编译器在第一次编译运行时看到宏的.class文件并使用它 是否有一种编写代码的方法(使用反射或类似方法)来确定宏生成的代码是否存在,以及是否调用它?我想做一些类似的事情,但不是调用普通的方法,而是调用宏生成的代码 我的目标是让代码在第一次编

我知道Scala宏不能在与宏本身在同一编译运行中编译的代码中引用

我还从经验测试中了解到,如果一个人有这样做的代码库(引用同一项目中的宏),如果删除对宏的引用,编译代码,重新插入对宏的引用,再次编译代码,第二次编译将成功,宏生成的代码将正常工作。我假设这是因为编译器在第一次编译运行时看到宏的.class文件并使用它

是否有一种编写代码的方法(使用反射或类似方法)来确定宏生成的代码是否存在,以及是否调用它?我想做一些类似的事情,但不是调用普通的方法,而是调用宏生成的代码

我的目标是让代码在第一次编译时做一件事,在第一次编译后每次编译时做另一件事,在两次编译运行之间不对源代码进行任何更改。我知道这不是一个好的做法。在大多数情况下,构建应该是确定性的。我感兴趣的是,作为一种技术好奇心,是否有可能创建这样的Scala代码

我知道Scala宏不能在编译的代码中引用 在与宏本身相同的编译中运行

Dotty有一些变化。现在,宏不能在同一个文件中引用,但可以在同一个编译运行中引用,否则

引述:

其思想是挂起宏的调用者(及其上游) 依赖项),编译包含宏的源文件,然后 然后在第二次运行中编译挂起的文件


到目前为止,您尝试过什么?我尝试过使用法线反射从定义宏的对象获取可用方法的列表。我认为这行不通,也行不通。通过该方法,[macro]\u impl函数始终可见,但[macro]函数永远不可见。