Scala 为什么比特集要求显式转换被视为Set[Int]的实例?

Scala 为什么比特集要求显式转换被视为Set[Int]的实例?,scala,scala-collections,Scala,Scala Collections,在scaladoc中,定义为扩展Set[Int]。因此,我认为在Set[Int]的实例中使用BitSet是可行的,但我得到了一个类型不匹配: Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). scala> import collection.BitSet import collection.BitSet scala> val b: Set[Int] =

在scaladoc中,定义为扩展
Set[Int]
。因此,我认为在
Set[Int]
的实例中使用
BitSet
是可行的,但我得到了一个类型不匹配:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).

scala> import collection.BitSet
import collection.BitSet

scala> val b: Set[Int] = BitSet()
<console>:8: error: type mismatch;
 found   : scala.collection.BitSet
 required: Set[Int]
       val b: Set[Int] = BitSet()
                               ^

那么,为什么我需要明确地将
位集
强制转换为
集[Int]
,而
集[Int]
集[Int]
的超级类型?

事实证明,
实际上是
scala.collection.immutable.Set
。所以你可以

val b0: Set[Int] = collection.immutable.BitSet()
val b1: collection.Set[Int] = collection.BitSet()
val b2: collection.immutable.Set[Int] = collection.immutable.BitSet()
val b3: collection.mutable.Set[Int] = collection.mutable.BitSet()
val b4: collection.Set[Int] = collection.immutable.BitSet()
val b5: collection.Set[Int] = collection.mutable.BitSet()
但这些都不是

val x1: collection.immutable.Set[Int] = collection.BitSet()
val x2: collection.immutable.Set[Int] = collection.mutable.BitSet()
val x3: collection.mutable.Set[Int] = collection.BitSet()
val x4: collection.mutable.Set[Int] = collection.immutable.BitSet()

结果是,
Set
的默认导入为您提供了
x2
。导入
collection.immutable.BitSet
,或导入
collection.Set
(以涵盖
collection.immutable.Set
)。

@jullybobble-您仍然感到困惑
collection.Set
和scala.collection.Set完全一样。你的意思是
Set
来自
Predef
。注意:我删除了@Rex回答的第一条评论,因为它是错误的和误导性的。
val x1: collection.immutable.Set[Int] = collection.BitSet()
val x2: collection.immutable.Set[Int] = collection.mutable.BitSet()
val x3: collection.mutable.Set[Int] = collection.BitSet()
val x4: collection.mutable.Set[Int] = collection.immutable.BitSet()