我正在尝试使用 Scala 宏来生成一些代码,更具体地说,我希望宏生成一个实例化抽象类的函数。例如,如果这是抽象类:
abstract class Person {
val name: String
val age: Int
}
所以宏将是这样的:
def m = macro _m
def _m(c: Context): c.Expr[Any] = {
import c.universe._
c.Expr(c.parse("""
(_name:String, _age:Int) => new Person{
val name = _name
val age = _age
}
"""))
}
到目前为止一切都很好,问题是宏当然需要更通用,并根据给定类的反射信息生成函数。
我浏览了 Scala 反射和宏文档,但找不到如何创建可以访问给定类的反射信息的宏。
我希望那个宏看起来像这样
def m = macro _m
def _m(c: Context)(<Type of the class>): c.Expr[Any] = {
import c.universe._
c.Expr(c.parse("""
<generate the function based on the type of the class>
"""))
}
并使用宏看起来像这样:
val factoryFunction = m(typeOf[Person])