【发布时间】:2011-11-24 18:04:47
【问题描述】:
我发现了一个我无法理解的可变集合的奇怪行为:
我有一个想要添加到集合中的对象。类的 equals 方法被覆盖。当我将两个不同的对象添加到集合中时,这会为 equals 方法生成相同的输出,但对于 contains 方法,我会在可变集和不可变集之间获得不同的行为。
这里是sn-p的代码:
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
谢谢。
【问题讨论】:
标签: scala set immutability scala-collections mutable