Set被定义为Set[A].它需要一个变量参数.由于我们正在传递共变量参数,因此在下面执行的工作正常:
scala> val a = Set(new Object)
a: scala.collection.immutable.Set[Object] = Set(java.lang.Object@118c38f)
scala> val b = Set("hi")
b: scala.collection.immutable.Set[String] = Set(hi)
scala> a & b
<console>:10: error: type mismatch;
 found   : scala.collection.immutable.Set[String]
 required: scala.collection.GenSet[Object]
Note: String <: Object, but trait GenSet is invariant in type A.
You may wish to investigate a wildcard type such as `_ <: Object`. (SLS 3.2.10)
              a & b
但下面的工作原理:
scala> Set(new Object) & Set("hi")
res1: scala.collection.immutable.Set[Object] = Set()
在我看来,scala编译器转换Set("hi") …