Scala 为什么比特集要求显式转换被视为Set[Int]的实例?
在scaladoc中,定义为扩展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] =
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()