क्या कक्षा परिभाषा में प्रारंभिक विधि शामिल होने पर मुझे किसी ऑब्जेक्ट को स्पष्ट रूप से प्रारंभ करने की आवश्यकता है?क्या रूबी कॉल स्वचालित रूप से विधि को प्रारंभ करता है?
उत्तर
नहीं, रुबी स्वचालित रूप से initialize
पर कॉल नहीं करता है।
Class#new
के डिफ़ॉल्ट कार्यान्वयन लग रहा है इस तरह एक सा:
class Class
def new(*args, &block)
obj = allocate
obj.initialize(*args, &block)
obj
end
end
[असल में, initialize
private
डिफ़ॉल्ट रूप से तो आप obj.send(:initialize, *args, &block)
उपयोग करने की आवश्यकता है।]
तो, Class#new
के डिफ़ॉल्ट कार्यान्वयन कॉल initialize
पर कॉल करता है, लेकिन यह एक कार्यान्वयन के साथ ओवरराइड या ओवरराइट करने के लिए पूरी तरह से संभव है (हालांकि बेहद बेवकूफ)।
तो, यह रूबी नहीं है जो initialize
पर कॉल करता है, यह Class#new
है। आपको लगता है कि यह विभाजित बाल है, क्योंकि Class#new
रूबी का एक अभिन्न अंग है, लेकिन यहां महत्वपूर्ण बात यह है कि यह किसी प्रकार का भाषा जादू नहीं है। यह किसी अन्य की तरह एक विधि है, और किसी भी अन्य विधि की तरह इसे ओवरराइड किया जा सकता है या कुछ अलग करने के लिए ओवरराइट किया जा सकता है।
और, यदि आप ऑब्जेक्ट बनाने के लिए new
का उपयोग नहीं करते हैं, लेकिन इसके बजाय इसे allocate
के साथ मैन्युअल रूप से करें, तो initialize
को भी नहीं कहा जाएगा।
कुछ मामले हैं जहां ऑब्जेक्ट initialize
पर कॉल किए बिना बनाए जाते हैं। जैसे जब dup
आईएनजी या clone
आईएनजी, initialize_dup
और initialize_clone
initialize
(बदले में, initialize_copy
पर कॉल करें) के बजाय बुलाए जाते हैं। और जब किसी ऑब्जेक्ट को deserializing, कहते हैं, Marshal
, इसकी आंतरिक स्थिति सीधे पुनर्निर्मित की जाती है (यानी उदाहरण चर के प्रतिबिंबित रूप से सेट होते हैं) initialize
के माध्यम से।
हां, इसे new
विधि से कहा जाता है, जिसका उपयोग आप वस्तुओं को बनाने के लिए करते हैं।
यह "स्पष्ट" की आपकी परिभाषा पर निर्भर करता है। अंतर्निहित आरंभीकरण का एक रूप बनाने
object = MyClass.new(...)
कुछ मामलों वहाँ कारखाने तरीकों कि उदाहरणों आप उपयोग कर सकते हैं उत्पादन कर रहे हैं में,:: आमतौर पर आप भले ही कोई तर्क हैं, की जरूरत है
object = MyClass.factory_method(...)
यह होता है आंतरिक रूप से MyObject.new
पर कॉल करने का प्रभाव।
object = MyClass(...)
object = MyClass[...]
प्रभाव ही है, इन अजीब लग रही है लेकिन अभी विधि कॉल कर रहे हैं हो सकता है के रूप में:
कुछ पुस्तकालयों जो बल्कि असामान्य विधि हस्ताक्षर है, की तरह हैं।
- 1. क्या foreach स्वचालित रूप से निपटान कॉल करता है?
- 2. प्रारंभ डिबगिंग F5 स्वचालित रूप से
- 3. क्या रूबी टेल कॉल ऑप्टिमाइज़ेशन करता है?
- 4. स्वचालित रूप से पुन: प्रारंभ Erlang अनुप्रयोगों
- 5. क्या अलामोफ़ीयर कुकीज़ को स्वचालित रूप से स्टोर करता है?
- 6. क्या SQLLulkCopy स्वचालित रूप से एक लेनदेन शुरू करता है?
- 7. एक विधि के बाद स्वचालित रूप से एक विधि को कॉल करने का एक क्लीनर तरीका?
- 8. स्वचालित रूप से
- 9. सेलेरीबीट स्वचालित रूप से आवधिक कार्य को अक्षम करता है
- 10. कॉल रूबी में बाहरी विधि
- 11. क्या पेपरक्लिप स्वचालित रूप से फ़ाइल नाम साफ़ करता है?
- 12. क्या विनाशक स्वचालित रूप से
- 13. रूबी क्लास प्रारंभ (कन्स्ट्रक्टर) निजी विधि या सार्वजनिक विधि है?
- 14. क्या हास्केल स्वचालित रूप से सिम अनुकूलन perfom करता है?
- 15. रूबी: विधि तर्क के रूप में स्वचालित रूप से आवृत्ति चर सेट करें?
- 16. क्या गिट रीयर स्वचालित रूप से फ़ाइलों को हल करने के रूप में चिह्नित करता है?
- 17. स्वचालित रूप से इनकमिंग कॉल को स्वचालित रूप से उत्तर दें?
- 18. रूबी विधि कॉल वर्ग शरीर
- 19. क्या Mercurial स्वचालित रूप से $ Id $ को परिवर्तित करता है जो सबवर्सन करता है?
- 20. क्या बेस क्लास कन्स्ट्रक्टर स्वचालित रूप से कॉल किया जाएगा?
- 21. क्या सुपर क्लास ओवरराइड विधि को कॉल नहीं करता है?
- 22. "स्वचालित" बनाम "स्वचालित (विलंबित प्रारंभ)"
- 23. जावा वेब प्रारंभ करने का कोई भी तरीका स्वचालित रूप से शॉर्टकट इंस्टॉल करता है?
- 24. विधि कॉल के रूप में समझना रूबी प्रतीक
- 25. निजी उदाहरण विधि से निजी वर्ग विधि को कॉल करें
- 26. क्या कोई UIViewController विधि है जो ऐप को पृष्ठभूमि में ले जाने पर स्वचालित रूप से कॉल हो जाती है?
- 27. स्वचालित रूप से VisualVM
- 28. क्या HttpGet स्वचालित रूप से कुकीज़ को संभालता है?
- 29. _adjustContentOffsetIfNecessary - UIScrollView स्वचालित रूप से शीर्ष पर स्क्रॉल करता है
- 30. क्या रूबी मणि को स्वचालित रूप से इंस्टॉल किए बिना डाउनलोड करना संभव है?
क्या आप यह उल्लेख करना चाहते हैं कि व्युत्पन्न वर्ग अपने माता-पिता के 'प्रारंभिक' के साथ कैसे इंटरैक्ट करता है? –
@ जॉर्ज 'ओवरराइट' से आपका क्या मतलब है? क्या आप इसे थोड़ा सा स्पष्ट कर सकते हैं? –
@ प्रिती: रुबी ने तथाकथित * खुले वर्ग * को बुलाया है, यह आपको एक नए तरीके के साथ एक मौजूदा विधि को ओवरराइट करने की अनुमति देता है। –