scala宏:向类添加函数

前端之家收集整理的这篇文章主要介绍了scala宏:向类添加函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 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宏做到这一点?或者有另一种方法来实现这一目标吗?

解决方法

目前无法添加,修改删除宏外可见的定义.即你可以创建一个扩展本地的类或方法(例如,发出一个ClassDef树作为宏返回结果的一部分),但是没有办法影响外部世界.

然而,我们计划在http://scalamacros.org/future.html中粗略地描述这个功能.此外,已经有一个可以生成新的顶级类的可靠原型.如果您想看一下,请与我联系.

猜你在找的Scala相关文章