我是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)
}
Run Code Online (Sandbox Code Playgroud)
我在以下场景中需要这个.我的第一次尝试没有使用宏但没有用,因为我不能继承两次相同的特性.
trait AddF[T] {
def f(t: T) { /* ...do sthg ... */ }
}
class MyClass extends AddF[Int] with AddF[String]
Run Code Online (Sandbox Code Playgroud)
使用宏解决方案,我可以写
class MyClass extends MyTrait {
addF[Int]()
addF[String]()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用scala宏做到这一点?或者有另一种方法来实现这一目标吗?