考虑下面的sealed trait
sealed trait Type
object Type {
case object S
}
sealed trait Test{
type Tpe <: Type
}
object Test {
type Aux[T <: Type] = Test{ type Tpe = T }
}给定一个表示Test.Aux[S.type]的ClassSymbol,有没有一种方法可以获得表示sealed trait Test的ClassSymbol
发布于 2021-01-14 17:37:27
在深入研究API之后,我找到了以下解决方案:
def refinedSealedTrait(symbol: Symbols#Symbol): Symbol = {
if (!symbol.isRefinementClass) {
return false
}
val parents = symbol.parentSymbols
if (parents.size != 1) {
return false
}
val parentSymbol = parents.iterator.next
if (parentSymbol.isSealed && parentSymbol.isTrait) {
parentSymbol
} else {
c.abort(...)
}
}https://stackoverflow.com/questions/65716079
复制相似问题