macros de scala: agregar función a la clase
Soy nuevo en las macros de Scala y estoy usando Scala 2.10.0-RC3.
Quiero escribir una macro que agregue una función a una clase. Ejemplo de uso:
trait MyTrait {
def addF = macro { /*add "def f = 3" to class*/ }
}
class MyClass extends MyTrait {
addF //Adds the "def f" to MyClass
}
object Main {
val t = new MyClass
assert(t.f==3)
}
Necesito esto en el siguiente escenario. Mi primer intento no usé macros, pero no funcionó, porque no puedo heredar el mismo rasgo dos veces.
trait AddF[T] {
def f(t: T) { /* ...do sthg ... */ }
}
class MyClass extends AddF[Int] with AddF[String]
Con la macro solución podría escribir
class MyClass extends MyTrait {
addF[Int]()
addF[String]()
}
¿Hay alguna manera de hacer esto con macros de scala? ¿O hay otra manera de lograr esto?