在Scala宏中检测案例类

eou*_*3hf 3 reflection scala case-class scala-macros scala-2.11

在一种称为scala(2.11)宏的方法中,是否有一种方法可以以编程方式确定a是否Type为a case class

我正在研究的方法的API可以归结为:

def typeIsCaseClass(c: Context)(targetType: c.universe.Type): Boolean = {
  // targetType "is case class?"
}
Run Code Online (Sandbox Code Playgroud)

如果需要,我愿意更改API。

Jas*_*r-M 5

这些符号通常包含所有有趣的信息:

def typeIsCaseClass(c: Context)(targetType: c.universe.Type): Boolean = {
  val sym = targetType.typeSymbol
  sym.isClass && sym.asClass.isCaseClass
}
Run Code Online (Sandbox Code Playgroud)