Реализуйте макрос в суперклассе и раскройте его в подклассах
Я хочу сделать что-то вроде этого:
trait Endo {
def apply[T](x: T): T
}
trait SuperType {
def endoMap(f: Endo): SuperType = macro SuperTypeMacro.endoMapImpl
}
case class Foo(x: Int) extends SuperType {
// endoMapImpl expands to
// Foo(f(x))
}
case class Bar(x: Int, y: Boolean) extends SuperType {
// endoMapImpl expands to
// Bar(f(x), f(y))
}
В идеале единственное, что мне нужно написать, это extends SuperType
, Является ли это возможным? Если нет, то я считаю, что макроаннотации должны позволять это; я прав?
1 ответ
Решение
Я думаю, что вы ищете c.prefix
, который содержит получатель текущего вызова метода макроса. Как только вы овладеете им, вы можете перейти на его тип.