, я обнаружил странное поведение изменяемых наборов, которое я не могу понять:
У меня есть объект, который я хочу добавить в набор. Метод equals для класса переопределяется. Когда я добавляю два разных объекта в набор, который дает одинаковый результат для метода equals, я получаю различное поведение между изменяемыми и неизменяемыми наборами для метода contains.
Вот фрагмент кода:
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")))
Результатом является:
Set(test)
false
Set(test)
true
На мой взгляд, оба вызова contains должны давать одинаковый результат (true).
Может ли кто-нибудь помочь мне понять разницу, или это ошибка в реализации неизменяемого набора scala? Кстати, я использую scala 2.8.1.final
Спасибо.