Scala 有没有办法在宏上下文中获取类符号的直接父级?

Scala 有没有办法在宏上下文中获取类符号的直接父级?,scala,scala-reflect,Scala,Scala Reflect,我试图获得类符号的直接超类/特征。方法baseClasses()对我不起作用,因为它还包括super-super。。类型 java.lang.Class.getSuperclass()和java.lang.Class.getInterfaces()对于我的用例来说已经足够了,但是我找不到在宏上下文中从ClassSymbol到java.lang.Class的方法 如果您使用宏-您无法为编译时中不存在(已加载)的类获取运行时对象Class(因此您无法从中访问编译类)。但是,您可以编写自己的函数: d

我试图获得类符号的直接超类/特征。方法
baseClasses()
对我不起作用,因为它还包括super-super。。类型


java.lang.Class.getSuperclass()
java.lang.Class.getInterfaces()
对于我的用例来说已经足够了,但是我找不到在宏上下文中从
ClassSymbol
java.lang.Class
的方法

如果您使用宏-您无法为编译时中不存在(已加载)的类获取运行时对象
Class
(因此您无法从中访问编译类)。但是,您可以编写自己的函数:

def getDirectBase(a: ClassSymbol) = { 
   val base = a.baseClasses.toSet - a //`baseClasses` contains `a` itself
   val basebase = base.flatMap { 
      case x: ClassSymbol => x.baseClasses.toSet - x
   }
   base -- basebase
}
结果(使用运行时反射获得的示例,但此处的编译时应相同):

scala> class A
scala> class B extends A
scala> class C extends B

scala> typeOf[C].typeSymbol.asInstanceOf[ClassSymbol].baseClasses
res37: List[reflect.runtime.universe.Symbol] = List(class C, class B, class A, class Object, class Any)

scala> getDirectBase(typeOf[C].typeSymbol.asInstanceOf[ClassSymbol])
res38: scala.collection.immutable.Set[reflect.runtime.universe.Symbol] = Set(class B)