Seq和Set的LUB

时间:2015-09-04 14:49:22

标签: scala

我采用了SeqSet

的最小上界
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> lub( List (typeOf[Seq[_]], typeOf[Set[_]]) )
res12: reflect.runtime.universe.Type = 
             Iterable[Any] with Int with _$2 => Any forSome { type _$2 }

请帮我理解输出。我猜测IterableSetSeq中父亲最少的父母。

但剩下的呢?

1 个答案:

答案 0 :(得分:1)

(Int with _$2) => Any forSome { type _$2 }部分来自于Function1Set直接扩展,Seq扩展PartialFunction)。

具体来说,它是(A) => Boolean(由Set[A]扩展)和PartialFunction[Int, A](由Seq[A]扩展)的LUB。

@ import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

@ lub(List(typeOf[Function1[_, Boolean]], typeOf[PartialFunction[Int, _]]))
res1: Type = _$1 with Int => Any forSome { type _$1 }

,其中

Int with _Int_的GLB(因为Function1的第一个类型参数是逆变的)

Any_Boolean的LUB。