我是 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)
}
在以下情况下我需要这个。我的第一次尝试没有使用宏但没有用,因为我不能两次继承相同的特征。
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 宏来做到这一点?还是有另一种方法可以实现这一目标?
最佳答案
当前无法添加、修改或删除宏外部可见的定义。 IE。您可以创建扩展的本地类或方法(例如,发出 ClassDef 树作为宏返回的结果的一部分),但没有影响外部世界的工具。
然而,我们计划用 http://scalamacros.org/future.html 中粗略描述的这个功能进行试验。 .此外,已经有一个可靠的原型(prototype)可以生成新的顶级类。想看的可以联系我了解详情。
关于斯卡拉宏 : Add function to class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13630366/