2012-03-13 13 views
6

En el scaladoc, BitSet se define como que se extiende Set[Int]. Así que pensé utilizando un BitSet como en la instancia de Set[Int] funcionaría, pero me da una coincidencia de tipos:¿Por qué BitSet requiere un molde explícito para ser considerado como una instancia de Set [Int]?

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() 
          ^

Sin embargo un elenco de obras:

scala> val b: Set[Int] = BitSet().asInstanceOf[Set[Int]] 
b: Set[Int] = BitSet() 

Entonces, ¿por qué necesito para emitir explícitamente un BitSet a un Set[Int] mientras que Set[Int] es un super-tipo de Set[Int]?

Respuesta

9

Resulta que su Set es en realidad scala.collection.immutable.Set. Por lo que puede

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() 

pero no cualquiera de

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() 

y resulta que la importación por defecto para Set que da x2. Importe collection.immutable.BitSet, o importe collection.Set (para cubrir collection.immutable.Set).

+0

@jullybobble - Todavía está confundido. 'collection.Set' y' scala.collection.Set' son _exactamente lo mismo_. Quieres decir 'Establecer' de' Predef'. –

+0

¡Uy, claro! ¡Ahora lo tengo! ¡Gracias por la corrección! –

+0

Nota: eliminé mi primer comentario en el que respondió @Rex porque era incorrecto y equívoco. –

Cuestiones relacionadas