odkryłam dziwne zachowanie dla zestawów modyfikowalnych których nie mogę zrozumieć:Scala: Zawiera modyfikowalnych i niezmiennych w zestawach
Mam obiektu, który chcę dodać do zestawu. Metoda równań dla klasy jest nadpisywana. Kiedy dodaję dwa różne obiekty do zestawu, który produkuje ten sam wynik dla metody równości, otrzymuję inne zachowanie między zmiennymi i niezmiennymi zestawami dla metody zawiera.
Oto fragment kodu:
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")))
To daje na wyjściu:
Set(test)
false
Set(test)
true
Moim zdaniem oba wywołania zawiera powinien produkować taką samą moc (true).
Czy ktoś mógłby mi pomóc zrozumieć różnicę tutaj lub czy jest to błąd w niezmiennej implementacji zestawu scala? Przy okazji używam scala 2.8.1.final
Dzięki.
Dokładnie tak, jak mówi Matthew :-) –
Dziękuję, nie zauważyłem, że istnieją specjalne przypadki dla niezmiennych zbiorów wielkości 1. – Stefan