我必须在使用蛋糕模式的项目中集成一些宏。这种模式使我们能够避免大量进口以及其他优势,因此我们希望保留它。现在,我们在主干外测试的一些实验性宏遇到了问题。首先,让我们展示一个名为 Cake 的虚拟系统:
trait APiece {
class A
}
trait BPiece { this: APiece =>
def aMacro(a: A): Unit = () /* macro ??? */
}
trait CPiece { this: APiece with BPiece =>
def aMacroInvoker = aMacro(new A)
}
class Cake { this: APiece with BPiece with CPiece => }
APiece定义了一个类,BPiece应该是一个使用 APiece 定义的类的宏,最后,CPiece调用该宏。我说 BPiece 应该是一个宏,因为我无法为它编写实现代码。我尝试了几种方法,但总是因以下错误而崩溃:
"macro implementation must be in statically accessible object"
阅读宏代码可以猜测将宏包含在静态模块中是必要的。有没有办法部署使用系统结构的宏?