makra scala: Dodaj funkcję do klasy
Jestem nowym użytkownikiem makr Scala i używam scala 2.10.0-RC3.
Chcę napisać makro, które dodaje funkcję do klasy. Przykład użycia:
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)
}
Potrzebuję tego w następującym scenariuszu. Moja pierwsza próba nie używała makr, ale nie działała, ponieważ nie mogę odziedziczyć tej samej cechy dwa razy.
trait AddF[T] {
def f(t: T) { /* ...do sthg ... */ }
}
class MyClass extends AddF[Int] with AddF[String]
Dzięki rozwiązaniu makro mogłem napisać
class MyClass extends MyTrait {
addF[Int]()
addF[String]()
}
Czy można to zrobić za pomocą makr scala? Czy jest inny sposób na osiągnięcie tego?