que he descubierto un comportamiento extraño para los conjuntos mutables que no puedo entender:Scala: Contiene en conjuntos mutables e inmutables
Tengo un objeto que quiero añadir a un conjunto. El método equals para la clase está anulado. Cuando agrego dos objetos diferentes al conjunto, que produce la misma salida para el método igual, obtengo un comportamiento diferente entre los conjuntos mutables e inmutables para el método contains.
Aquí es el fragmento de código:
class Test(text:String){
override def equals(obj:Any) = obj match {
case t: Test => if (t.text == this.text) true else false
case _ => false
}
override def toString = text
}
val mutableSet:scala.collection.mutable.Set[Test] = scala.collection.mutable.Set.empty
mutableSet += new Test("test")
println(mutableSet)
println(mutableSet.contains(new Test("test")))
val immutableSet:scala.collection.immutable.Set[Test] = scala.collection.immutable.Set.empty
immutableSet += new Test("test")
println(immutableSet)
println(immutableSet.contains(new Test("test")))
Esto produce como salida:
Set(test)
false
Set(test)
true
En mi opinión ambas llamadas de contiene debe producir la misma salida (verdadero).
¿Alguien podría ayudarme a entender la diferencia aquí o es esto un error en la implementación del conjunto de scala inmutable? Por cierto, uso scala 2.8.1.final
Gracias.
Exactamente como dice Matthew :-) –
Gracias, no he reconocido, que hay casos especiales para conjuntos inmutables de tamaño 1. – Stefan