私はscalaマクロが初めてで、scala 2.10.0-RC3を使用しています。
クラスに関数を追加するマクロを書きたいです。使用例:
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)
}
次のシナリオでこれが必要です。私の最初の試みはマクロを使用しませんでしたが、同じ特性を 2 回継承することはできないため、機能しませんでした。
trait AddF[T] {
def f(t: T) { /* ...do sthg ... */ }
}
class MyClass extends AddF[Int] with AddF[String]
私が書くことができるマクロソリューションで
class MyClass extends MyTrait {
addF[Int]()
addF[String]()
}
scala マクロでこれを行う方法はありますか? または、これを達成する別の方法はありますか?