Tôi đã phát hiện thấy một hành vi lạ đối với các nhóm có thể thay đổi mà tôi không thể hiểu:Scala: Chứa các bộ có thể thay đổi và không thay đổi
Tôi có một đối tượng mà tôi muốn thêm vào bộ. Phương thức equals cho lớp được ghi đè. Khi tôi thêm hai đối tượng khác nhau vào tập hợp, tạo ra cùng một đầu ra cho phương thức equals, tôi nhận được một hành vi khác nhau giữa các bộ có thể thay đổi và không thay đổi được cho phương thức chứa.
Dưới đây là đoạn mã:
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")))
này tạo ra như đầu ra:
Set(test)
false
Set(test)
true
Theo tôi cả hai cuộc gọi của chứa nên sản xuất cùng một sản lượng (true).
Ai đó có thể giúp tôi hiểu sự khác biệt ở đây hoặc đây có phải là lỗi trong việc thực hiện thiết lập không thay đổi được không? Nhân tiện, tôi sử dụng scala 2.8.1.final
Cảm ơn.
Chính xác như Matthew nói :-) –
Cảm ơn bạn, tôi đã không nhận ra, rằng có những trường hợp đặc biệt cho các bộ không thay đổi kích thước 1. – Stefan