2008-09-18 14 views
7

रूबी में, कई अन्य ओओ प्रोग्रामिंग भाषाओं की तरह, ऑपरेटर ओवरलोड करने योग्य होते हैं। हालांकि, केवल कुछ चरित्र ऑपरेटरों को अधिभारित किया जा सकता है।क्यों रूबी केवल कुछ ऑपरेटर ओवरलोडिंग को अनुमति देता है

यह सूची अपूर्ण हो सकती है लेकिन, यहां ऑपरेटरों कि अतिभारित नहीं किया जा सकता से कुछ हैं:

!, not, &&, and, ||, or 

उत्तर

11

तरीके overloadable कर रहे हैं, उन भाषा वाक्यविन्यास का हिस्सा हैं।

+1

जैसा कि जोर ने अपने उत्तर में उल्लेख किया था, '!' को ओवरराइड किया जा सकता है। –

25
+4

असल में, यह कोई समस्या नहीं है। 'A && b' को 'ए। && (बी)' में अनुवाद करने के बजाय, आप इसे 'ए। && {b}' में अनुवाद कर सकते हैं। ब्लॉक * करते हैं * आलसी मूल्यांकन प्रदान करते हैं। –

12

हां। ऑपरेटर अधिभार योग्य नहीं हैं। केवल विधियां

कुछ ऑपरेटरों वास्तव में नहीं हैं। वे विधियों के लिए चीनी हैं। तो 5 + 5 वास्तव में 5.+(5) है, और foo[bar] = baz वास्तव में foo.[]=(bar, baz) है।

1

और चलो के बारे में << उदाहरण के लिए भूल नहीं:

string = "test" 
string << "ing" 

कॉल करने जैसा ही है:

string.<<("ing") 
6

रूबी 1.9 में, ! ऑपरेटर वास्तव में यह भी एक तरीका है और ओवरराइड किया जा सकता। यह केवल && और || और उनके निम्न प्राथमिकता समकक्ष and और or छोड़ देता है।

कुछ अन्य "संयुक्त ऑपरेटर" भी हैं जिन्हें अतिरंजित नहीं किया जा सकता है, उदा। a != b वास्तव में !(a == b) और a += b वास्तव में a = a+b है।

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