क्या कोई मुझे बता सकता है कि विधि परिभाषा में self
जोड़ने का महत्व क्या है? क्या यह जावा में this
कीवर्ड जैसा है?def 'self.function` नाम का क्या अर्थ है?
उत्तर
अन्य भाषाओं के विपरीत, रूबी के पास कोई वर्ग विधि नहीं है, लेकिन इसमें एक विशेष वस्तु से जुड़ी सिंगलटन विधियां हैं।
cat = String.new("cat")
def cat.speak
'miaow'
end
cat.speak #=> "miaow"
cat.singleton_methods #=> ["speak"]
def cat.speak
एक सिंगलटन विधि वस्तु बिल्ली से जुड़ी बनाया गया है।
जब आप class A
लिखते हैं, यह A = Class.new
के बराबर है:
A = Class.new
def A.speak
"I'm class A"
end
A.speak #=> "I'm class A"
A.singleton_methods #=> ["speak"]
def A.speak
एक सिंगलटन विधि वस्तु ए से जुड़ी हम यह वर्ग ए के एक वर्ग विधि कॉल करने का उपयोग पैदा कर दी है
जब आप
class A
def self.c_method
'in A#c_method'
end
end
लिखते हैं तो आप कक्षा (*) का एक उदाहरण बनाते हैं।कक्षा परिभाषा के अंदर, रूबी कक्षा के इस नए उदाहरण को स्वयं सेट करता है, जिसे निरंतर ए को सौंपा गया है। इस प्रकार def self.c_method
def cat.speak
के समतुल्य है, जिसका अर्थ यह है कि आप ऑब्जेक्ट से जुड़े सिंगलटन विधि को परिभाषित करते हैं, जो वर्तमान में है कक्षा ए
अब कक्षा ए में दो सिंगलटन विधियां हैं, जिन्हें हम आमतौर पर कक्षा विधियों को कॉल करते हैं।
A.singleton_methods
=> ["c_method", "speak"]
(*) तकनीकी रूप से, इस मामले में जहां एक पहले से ही एक = Class.new द्वारा बनाई गई है में, class A
मौजूदा वर्ग खोल देता है। यही कारण है कि अंत में हमारे पास दो सिंगलटन विधियां हैं। लेकिन सामान्य स्थिति में जहां यह कक्षा की पहली परिभाषा है, इसका मतलब कक्षा है। नया।
एक विधि घोषित करते समय, घोषणा के self
घोषित वर्ग/मॉड्यूल है, इसलिए प्रभावी ढंग से आप कक्षा विधि को परिभाषित कर रहे हैं। यह जावा में static
विधि की तरह है। आप उदाहरण के बजाए कक्षा पर विधि को कॉल करेंगे: MyClass.method
Here आप कक्षा और उदाहरण विधियों पर कुछ और विवरण पा सकते हैं।
संपादित करें: एक ओर जहां self
कीवर्ड जावा में this
कीवर्ड के लिए समान है, वर्ग विधि घोषणा के लिए self
का उपयोग कर के प्रभाव को जावा में static
कीवर्ड का उपयोग करने के प्रभाव के समान हैं। समानता यह है कि जावा में स्थैतिक तरीकों, जैसे रूबी में कक्षा विधियों को कक्षा के उदाहरण के बजाय क्लास ऑब्जेक्ट का उपयोग करके एक्सेस किया जाता है।
कृपया ध्यान दें कि static
गतिशील के विपरीत के लिए खड़ा नहीं है। इस कीवर्ड के नाम की पसंद संदिग्ध है (शायद सी से विरासत में मिली) और इसे perClass
कहा जाना चाहिए या अर्थ को बेहतर ढंग से प्रतिबिंबित करने के समान होना चाहिए। तकनीकी अर्थ यह है कि सभी static
सदस्य प्रत्येक क्लासलोडर के लिए केवल एक बार मौजूद होते हैं।
यह * स्थिर 'की तरह * कुछ भी नहीं है। विशेष रूप से, वे विधियां गतिशील हैं, स्थैतिक नहीं हैं। –
@ जोर्ग डमिटाग: यह जावा की 'स्थिर' की तरह कम से कम एक अर्थ में है - यह आवृत्ति स्तर की बजाय कक्षा स्तर पर लागू होता है। –
@ जोर्ग डमिटाग - <कुछ भी नहीं> अलग समानता वाले कुछ के लिए एक मजबूत शब्द है (और निश्चित रूप से मतभेद हैं)। मेरे दृष्टिकोण को स्पष्ट करने के लिए कुछ जानकारी जोड़ दी है। – kostja
रूबी स्वयं जावा में this
के समान कुछ है, लेकिन जब कक्षाओं में यह शब्द static
जावा में अधिक होता है। एक छोटी उदाहरण:
class A
# class method
def self.c_method
true
end
# instance method
def i_method
true
end
end
A.c_method #=> true
A.i_method #=> failure
A.new.i_method #=> true
A.new.c_method #=> failure
अद्यतन: माणिक में जावा और वर्ग के तरीकों में स्थिर तरीकों
जावा में स्टेटिक तरीकों दो अलग-अलग विशेषताएं हैं के बीच अंतर है कि उन्हें उदाहरण के तरीकों से अलग बनाता है: क) वे स्थैतिक हैं, बी) वे एक उदाहरण से जुड़े नहीं हैं। (IOW: वे वास्तव में विधियों की तरह नहीं हैं, वे केवल प्रक्रियाएं हैं।) रूबी में, सभी विधियां गतिशील होती हैं, और सभी विधियां एक उदाहरण से जुड़ी होती हैं। वास्तव में, जावा के विपरीत जहां तीन अलग-अलग प्रकार के "विधियों" (उदाहरण विधियों, स्थिर विधियों और रचनाकारों) हैं, रूबी में केवल एक ही विधि है: उदाहरण विधियां। तो, नहीं: जावा में स्थिर तरीके रूबी में विधियों के विपरीत पूरी तरह से हैं। - जोर्ग डब्ल्यू मिट्टाग 1 घंटा पहले
यह * स्थिर नहीं है * बिल्कुल 'स्थिर 'की तरह। विशेष रूप से, वे विधियां गतिशील हैं, स्थैतिक नहीं हैं। –
यदि आप def 'self.method के साथ रूबी में 'कक्षा # विधि' को परिभाषित करते हैं ... 'इसकी तरह' क्लास जावा क्लास की तरह; सार्वजनिक स्थैतिक शून्य विधि ... जावा में – krichard
जावा में स्थिर विधियों में दो विशिष्ट विशेषताएं हैं जो उन्हें उदाहरण विधियों से अलग बनाती हैं: ए) वे स्थैतिक हैं, बी) वे एक उदाहरण से जुड़े नहीं हैं। (IOW: वे वास्तव में विधियों * की तरह नहीं हैं *, वे केवल प्रक्रियाएं हैं।) रूबी में, * सभी * विधियां गतिशील हैं, और * सभी * विधियां एक उदाहरण से जुड़ी हैं। वास्तव में, जावा के विपरीत जहां तीन अलग-अलग प्रकार के "विधियों" (उदाहरण विधियों, स्थिर विधियों और रचनाकारों) हैं, रूबी में केवल * एक * प्रकार की विधि है: उदाहरण विधियां। तो, नहीं: जावा में स्थिर तरीके रूबी में विधियों के विपरीत पूरी तरह से हैं। –
- 1. def self.up क्या करें, def up, self.down def def, मतलब def def?
- 2. ऑपरेटर # :: का क्या अर्थ है?
- 3. सीटीओआर का क्या अर्थ है?
- 4. "===" का क्या अर्थ है?
- 5. {} का क्या अर्थ है?
- 6. यह '_time_independent_equals` का क्या अर्थ है?
- 7. मेलडिर संदेश फ़ाइल नाम में झंडे का क्या अर्थ है?
- 8. ओरेकल डीबी नाम और एसआईडी का क्या अर्थ है?
- 9. कक्षा के नाम से जुड़े अंडरस्कोर का अर्थ क्या है?
- 10. '&' और '!' का अर्थ क्या है संपत्ति के नाम से पहले?
- 11. PHP टोकन नाम T_PAAMAYIM_NEKUDOTAYIM का अर्थ क्या है?
- 12. सी ++ में "सार्वभौमिक चरित्र नाम रूपांतरण" का क्या अर्थ है?
- 13. एक चर नाम में $ का अर्थ क्या है?
- 14. ग्रोवी में 'निजी' का क्या अर्थ है?
- 15. * args और ** kwargs का क्या अर्थ है?
- 16. आईओएस नेटवर्किंग इंटरफेस नाम का क्या अर्थ है? पीडीपी_आईपी क्या है? क्या चल रहा है?
- 17. डब्ल्यूएस- * का क्या अर्थ है?
- 18. एएसआई का क्या अर्थ है?
- 19. #line का क्या अर्थ है?
- 20. 4j का क्या अर्थ है?
- 21. UrlReferrer का क्या अर्थ है?
- 22. "javax.naming.N.NoInitialContextException" का क्या अर्थ है?
- 23. एक्टिविटी() का क्या अर्थ है?
- 24. थ्रेडसेफ का क्या अर्थ है?
- 25. view.bounds.origin का अर्थ क्या है?
- 26. "बहिष्कृत" का क्या अर्थ है?
- 27. xmlns = "" का क्या अर्थ है
- 28. आईडी का अर्थ क्या है?
- 29. जीएनयू का क्या अर्थ है?
- 30. "@ + आईडी" का क्या अर्थ है?
के लिए धन्यवाद यह सही उत्तर है। यह सच है कि अनुभवी रूबिस्ट कभी-कभी "क्लास ऑब्जेक्ट" शब्द का उपयोग "क्लास ऑब्जेक्ट के सिंगलटन क्लास के उदाहरण विधि" के लिए करते हैं, लेकिन वे पूरी समझ में उस शॉर्टंड का उपयोग करते हैं कि * क्लास विधि * जैसी कोई चीज़ नहीं है माणिक। (वास्तव में, "सिंगलटन विधि" जैसी कोई चीज़ नहीं है: सिंगलटन विधियां केवल नियमित विधियां होती हैं जिन्हें किसी ऑब्जेक्ट के सिंगलटन क्लास में परिभाषित किया जाता है।) ओपी, हालांकि, स्पष्ट रूप से * अनुभवी रूबीस्ट नहीं है , इसलिए उसे शॉर्टेंड के साथ भ्रमित करना एक अच्छा विचार नहीं है। थम्स अप! –