看How to define a function which accept both Seq[T] and ParSeq[T] as parameter?,我认为lub
(最低上限)是合适的
然而,它给出了以下,长输出:
import scala.reflect.runtime.universe._
scala> lub( List( typeOf[scala.collection.Seq[Int]],
typeOf[scala.collection.parallel.ParSeq[Int]] ) )
res1: reflect.runtime.universe.Type = scala.collection.GenSeq[Int]{def ...
看起来GenSeq
是lub
。但是,如何才能单独获取该类型,即GenSeq[Int]
,排除其他详细信息?
答案 0 :(得分:1)
通过调用Type
获得的lub
是实际的LUB(最小上限),要求“单独类型”具有误导性,一个已经是正确的LUB。
GenSeq[Int]
是上限但不是LUB,它是LUB的超类。
那个神秘的类型实际上是RefinedType
,所以你可以获得它的超类列表:
import reflect.runtime.universe._
def unRefined(tp: Type): List[Type] = tp match {
case rtp: RefinedType => rtp.parents
case _ => ???
}
回到你的例子,它给你:
scala> unRefined(res1)
res2: List[reflect.runtime.universe.Type] = List(scala.collection.GenSeq[Int])