Я должен интегрировать некоторые макросы в проект, использующий шаблон торта. Эта модель позволила нам избежать огромного количества импорта, помимо других преимуществ, поэтому мы хотели бы сохранить ее. Теперь у нас возникла проблема с некоторыми экспериментальными макросами, которые мы тестировали вне магистрали. Во-первых, давайте покажем фиктивную систему с именем 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"
Читая код макроса, можно догадаться, что макрос необходимо заключать в статический модуль. Есть ли способ развернуть макрос, использующий системные структуры?