मैं रुबी सीख रहा हूं और मैंने देखा है कि सम्मेलन द्वारा विधि नाम के अंत में एक विस्मयादिबोधक का मतलब है कि विधि किसी भी तरह से self
को संशोधित करती है। self
से तत्व को हटाए जाने के बाद slice!
जैसे विस्मयादिबोधक चिह्न के साथ Array#delete
अंत क्यों नहीं होता है? क्या मुझे कुछ मौलिक याद आ रही है?नामकरण सम्मेलन: अंत में # हटाए गए अंत में कोई विस्मयादिबोधक चिह्न क्यों नहीं है?
10
A
उत्तर
15
Matz (रूबी के मुख्य इंजीनियर) के शब्दों में: (!)
धमाके मतलब यह नहीं है "विनाशकारी" है और न ही इसे की कमी विनाशकारी या तो गैर मतलब है। बैंग साइन का मतलब है "बैंग संस्करण अधिक अपने गैर बैंग समकक्ष से खतरनाक है; देखभाल के साथ संभाल"।
Array#delete
में कम खतरनाक समकक्ष नहीं है, विस्मयादिबोधक की कोई आवश्यकता नहीं है।
4
"बैंग" विधियों का यह अर्थ यह नहीं है कि यह रिसीवर को संशोधित करता है। यह एक विधि का एक संकेत है जो मौजूदा विधि का एक और खतरनाक संस्करण है। रूबी 2.0 बदलने के लिए David A. Black's description अंतर, और response to a request देखें।
यह एक बहुत ही आम गलतफहमी है। बहुत उच्च वोट वाले गलत उत्तर here पर ध्यान दें।
मेरा अनुमान है क्योंकि '# delete' केवल हटा सकता है इसलिए इसे ध्वजांकित करने की आवश्यकता नहीं है। '# Upper_case' जैसे कुछ को किसी नए बनाए गए ऑब्जेक्ट को असाइन किया जा सकता है या उपयोग के निर्धारण पर मूल ऑब्जेक्ट को ओवरराइट कर दिया जा सकता है। – ScottJShea
हां, लेकिन # ध्वज के साथ हटाए गए किसी भी क्लोन को निर्दिष्ट तत्व को घटा सकता है (यही वह है जो मुझे ध्वज की अनुपस्थिति के कारण अपेक्षित था) :) –
संभव डुप्लिकेट [रूबी विधियों में विस्मयादिबोधक चिह्न क्यों उपयोग किए जाते हैं?] (Http: //stackoverflow.com/questions/612189/why-are-exclamation-marks-used-in-ruby-methods) –