在超类中实现一个宏并在子类中展开它

时间:2014-02-26 13:35:46

标签: scala scala-macros

我想做这样的事情:

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 个答案:

答案 0 :(得分:2)

我认为你正在寻找的是c.prefix,它包含当前宏方法调用的接收者。一旦掌握了它,就可以对其类型进行分支。