我试图使用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
}
"""))
}
到目前为止好,问题是,宏观需求更加普遍,当然,并基于给定类的反映信息的功能。
我在斯卡拉反射和宏文件去了,我找不到如何创建可以访问给定类的反映信息的宏。
我想那个宏是这个样子
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])