我采用了Seq
和Set
:
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 }
请帮我理解输出。我猜测Iterable
是Set
和Seq
中父亲最少的父母。
但剩下的呢?
答案 0 :(得分:1)
(Int with _$2) => Any forSome { type _$2 }
部分来自于Function1
(Set
直接扩展,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。