2017-06-19 84 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 
}