Scala: Содержится в изменяемых и неизменяемых наборах

, я обнаружил странное поведение изменяемых наборов, которое я не могу понять:

У меня есть объект, который я хочу добавить в набор. Метод 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

Спасибо.

10
задан Matthew Farwell 26 September 2011 в 13:35
поделиться