मैं परिवर्तनशील सेट के लिए एक अजीब व्यवहार जो मैं नहीं समझ सकता की खोज की है में शामिल हैं। वर्ग के लिए बराबर विधि ओवरराइड है। जब मैं सेट में दो अलग-अलग ऑब्जेक्ट्स जोड़ता हूं, जो समान विधि के लिए समान आउटपुट उत्पन्न करता है, तो मुझे शामिल विधि के लिए परिवर्तनीय और अपरिवर्तनीय सेट के बीच एक अलग व्यवहार मिलता है।स्काला:</p> <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
मेरी राय में दोनों कॉल एक ही आउटपुट (सही) का उत्पादन करना चाहिए होता है
यहाँ कोड का टुकड़ा है।
क्या कोई मुझे यहां अंतर को समझने में मदद कर सकता है या क्या यह स्कैला अपरिवर्तनीय सेट कार्यान्वयन में एक बग है? वैसे, मैं स्कैला 2.8.1 का उपयोग करता हूं। फाइनल
धन्यवाद।
बिल्कुल मैथ्यू कहता है :-) –
धन्यवाद, मैंने यह नहीं पहचाना है कि आकार 1 के अपरिवर्तनीय सेट के लिए विशेष मामले हैं। – Stefan