2017-06-19 52 views
2

在被称为scala(2.11)宏的方法中,有没有一种方法可以通过编程来确定Type是否为case class检测scala宏中的case类

对我通过工作方法的API归结为:

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

我愿意改变API如果需要的话。

回答

3

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

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