2012-02-23 17 views
5

क्यों हम इस ऑपरेटर-विधिसंग्रह उच्च स्तरीय संचालन प्रतिवाद (सूची: सूची [एक] - एक: एक)

 @deprecated("use `filterNot (_ == x)` instead", "2.8.0") 
    def - [B >: A](x: B): List[B] 
//i.e. List(1,23,3,4,5) - 23 

सूचियों के लिए हटा दिया है, लेकिन सेट के लिए नहीं?

Set(1,23,3,4) - 23 

हैं, तो यह सूची प्रदर्शन के मामले में इस आपरेशन के लिए बहुत उपयुक्त नहीं है, लेकिन हम अभी भी लंबाई विधि हम से बचना चाहिए है। स्केल के भविष्य के संस्करणों में संग्रह ऑपरेटर कैसा दिखेंगे?

उत्तर

7

List विधि के साथ समस्या यह है कि आपने कभी ऐसा नहीं किया जो आप करेंगे। भोलेपन से, मैं

1,2,3,1,2,3 - 1,2,3,1 == 2,3 

और इसलिए

1,2,3,1,2,3 - 1 == 2,3,1,2,3 

कि सिवाय उम्मीद होती है नहीं तो आप क्या मिलता है; इसके बजाय आप

1,2,3,1,2,3 - 1 == 2,3,2,3 

मिल (जो वास्तव में क्या filterNot देता है, और जो आप की उम्मीद करनी चाहिए)।

चूंकि Set के तत्व अद्वितीय हैं, इसलिए दो विधियों के बीच कोई अंतर नहीं है।