Implementieren Sie ein Makro in einer Oberklasse und erweitern Sie es in Unterklassen

StackOverflow https://stackoverflow.com//questions/22043051

  •  21-12-2019
  •  | 
  •  

Frage

Ich möchte so etwas machen:

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))
}

Idealerweise ist das einzige, was ich schreiben müsste extends SuperType.Ist es möglich?Wenn nicht, glaube ich, dass Makroanmerkungen dies zulassen sollten;habe ich Recht?

War es hilfreich?

Lösung

Ich denke, wonach du suchst, ist c.prefix, das den Empfänger des aktuellen Makromethodenaufrufs enthält.Sobald Sie es in der Hand haben, können Sie nach seinem Typ verzweigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top