2011-10-10 14 views
5

पर ऑपरेटर जब मैं उदाहरण के कार्य करें:+ = अपरिवर्तनीय सेट

var airlines = Set("Qantas", "JetStar", "Air NZ") 
airlines += "Virgin" 

एयरलाइनों अपरिवर्तनीय सेट है।

+= अपरिवर्तनीय सेट विशेषता पर परिभाषित नहीं किया गया है।

तो += स्केल में एक अंतर्निहित ऑपरेटर है? मेरा मतलब है कि स्काला एयरलाइंस को नए set("Qantas", "JetStar", "Air NZ", "Virgin") के साथ पुन: असाइन करने के बारे में कैसे जानता है?

उत्तर

14

यदि = (उदा। +=) के साथ समाप्त होने वाला ऑपरेटर उपयोग किया जाता है लेकिन कक्षा पर परिभाषित नहीं किया जाता है, तो स्कैला कंपाइलर इसे उदास कर देगा।

airlines = airlines + "Virgin" 

या, ++= के लिए, हम

airlines ++= airlines 

airlines = airlines ++ airlines 

बेशक में desugared, dmeister notes के रूप में, यह केवल संकलित कर देगा कि अगर नई अभिव्यक्ति समझ में आता है होगा। उदाहरण के लिए, यदि हम var एस से निपटते हैं।

देखें Scala Reference §6.12.4 Assignment Operators
(<=, >= और !=, विशेष मामलों के रूप में बाहर रखा गया है के रूप में पैटर्न भी = साथ शुरू कर रहे हैं।)

+0

क्या आपका मतलब '+ =' है? या बस '='? – Dzhu

+0

मेरा मतलब है '=' के साथ समाप्त होना, इसलिए यह '+ =' या '- =' या '++ =' के लिए सच है। ('<=' , '> =' और '! =' को विशेष मामलों के रूप में बाहर रखा गया है, जैसा पैटर्न भी '=' से शुरू होते हैं।) – Debilski

3

+= ऑपरेटर "Virgin" वाली एक नई अपरिवर्तनीय सेट बनाता है और नया सेट प्रदान करती है airlines चर पर। मौजूदा सेट ऑब्जेक्ट को कड़ाई से बोलना नहीं बदला है, लेकिन सेट ने एयरलाइंस वैरिएबल पॉइंट्स को ऑब्जेक्ट किया है।

इसलिए यह काम करना महत्वपूर्ण है कि एयरलाइंस var परिवर्तनीय है और val नहीं है, क्योंकि आप val चर पर पुन: असाइन नहीं कर सकते हैं।

संबंधित मुद्दे