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