我正在尝试创建一个宏来为我提供特定案例类的 val 列表。
object CaseClass {
def valList[T]: List[String] = macro implValList[T]
def implValList[T](c: whitebox.Context): c.Expr[List[String]] = {
import c.universe._
val listApply = Select(reify(List).tree, TermName("apply"))
val vals = weakTypeOf[T].decls.collect {
case m: TermSymbol if m.isVal => q"${m.name}"
}
c.Expr[List[String]](Apply(listApply, vals.toList))
}
}
所以给定
case class AClass(
val a: String,
val b: Int
)
我想要一份清单CaseClass.valList[AClass] = List("a", "b")