मुझे लगता है कि ऑब्जेक्ट क्लास समेत सभी का पूर्वज है। तो मुझे लगता है कि यह class.class == ऑब्जेक्ट होना चाहिए। मुझे उलझन में थोड़ा उलझन औरऑब्जेक्ट.क्लास == रूबी में कक्षा क्यों?
उत्तर
कक्षा कक्षा (# प्रकार) पूर्वजों को वापस नहीं देती है। ऑब्जेक्ट्स क्लास क्लास है। कक्षा की कक्षा कक्षा है। कक्षा एक वस्तु है। विज्ञापन में सच्चाई: मैंने रूबी को कभी नहीं सीखा, लेकिन ऑब्जेक्ट-क्लास रिलेशन में है जो 30 साल पहले एक छोटा सा सेट बन गया था।
इस तरह यह गहरे लाल रंग का 1.9 में काम करता है:
Class.class = Class
Class.superclass = Module
Module.class = class
Module.superclass = Object
Object.class = Class
Object.superclass = BasicObject
BasicObject.class = Class
BasicObject.superclass = nil
Object
के वर्ग Class
है (के बाद से Object
अपने आप में एक वर्ग है), और Object
Class
के एक पूर्वज है।
एक परिपत्र संदर्भ है, यह बहुत जटिल है। मेरी व्यक्तिगत सिफारिश, अगर आपको इसके साथ खेलने की ज़रूरत नहीं है, तो वहां मत जाओ।
क्लास, वस्तु, मॉड्यूल और अन्य सभी वर्गों उदाहरणों एक वर्ग क्लास :)
Class.class == Module.class == Object.class == Hash.class == कक्षा की हैं
क्लास भी एक वस्तु (प्रणाली में किसी भी अन्य वस्तु की तरह) है, लेकिन यह वस्तु की प्रत्यक्ष उदाहरण नहीं है, यह एक का एक उदाहरण वर्ग (कक्षा इस मामले में)
ली गई हैकक्षा.superclass.superclass == ऑब्जेक्ट (बीच में मॉड्यूल के साथ)
ऑब्जेक्ट स्वयं भी एक वर्ग है। तो ऑब्जेक्ट.क्लास == कक्षा
कक्षा, मॉड्यूल और ऑब्जेक्ट में गोलाकार निर्भरता है क्योंकि वे ओओ मॉडल के मूल में हैं।
Object.class.superclass.superclass == वस्तु
=> parent (.superclass)
-> instance-of (.class)
alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct
परिपत्र निर्भरता काम करता है क्योंकि ये सभी अंतर्निर्मित कक्षाएं हैं। वे कोर रूबी रनटाइम का हिस्सा हैं और स्टार्ट-अप पर इस तरह से स्थापित होते हैं और जिस तरह से आप सामान्य रूप से कक्षा जोड़ते हैं, उस पर जोड़ा नहीं जाता है। रनटाइम में पॉइंटर्स सेट अप करने की शक्ति होती है, हालांकि यह चाहता है, और डिजाइनर ने इसे इस तरह से करना चुना। –
- 1. रूबी "बेस" कक्षा
- 2. कक्षा के बिना रूबी विधियों?
- 3. रूबी वर्तमान कक्षा
- 4. कक्षा() बनाम प्रकार() रूबी
- 5. रूबी सेटर्स को "स्वयं" क्यों चाहिए। कक्षा के भीतर योग्यता?
- 6. रूबी में नाम से कक्षा प्राप्त करें?
- 7. रूबी में कक्षा-कम डीएसएल कैसे बनाएं?
- 8. रूबी: रूबी में स्वयं
- 9. रूबी की अपवाद त्रुटि कक्षा
- 10. रूबी में कक्षा विधि (जावा में स्थिर के समतुल्य)
- 11. रूबी में ब्लॉक में कक्षा कैसे शुरू करें?
- 12. रूबी अपवाद - क्यों "और"?
- 13. कक्षा में संपत्ति का उपयोग क्यों करें?
- 14. क्यों सी ++ कक्षा परिभाषा में सार्वजनिक रेफरी
- 15. क्यों सी # कक्षा पुस्तकालयों में विस्तार विधियां
- 16. रूबी थ्रेड के लिए व्युत्पन्न कक्षा?
- 17. रूबी एक कक्षा विधि के भीतर स्थिर
- 18. रूबी न्यूनतम: सुइट- या कक्षा-स्तर सेटअप?
- 19. रूबी में "शून्य" क्यों नहीं कर सकता?
- 20. रूबी कोअन्स: कक्षा परिभाषा भाग 2
- 21. रूबी में कक्षा और क्लास के बीच क्या अंतर है?
- 22. रूबी में "कक्षा # विधि" का क्या अर्थ है?
- 23. रेल पर रूबी में एक आईडी या कक्षा जोड़ना?
- 24. रूबी में कक्षा के उदाहरण कैसे प्राप्त करें?
- 25. रूबी में कक्षा के नाम से पहले डबल कॉलन?
- 26. रूबी की स्ट्रिंगियो कक्षा वास्तव में क्या है?
- 27. एक कक्षा क्यों सील करें?
- 28. अलग रूबी कार्यान्वयन क्यों हैं?
- 29. रूबी
- 30. कक्षा कक्षा - उदाहरण बनाम कक्षा के तरीके
Metaclasses रूबी में अलग तरह से काम: वे विधि देखने श्रृंखला में इंजेक्शन हो, इस प्रकार रूबी दो समानांतर पदानुक्रम नहीं है कक्षाओं और metaclasses के, लेकिन, जैसा कि आप कहते हैं, मूल बातें समान हैं। –
@ जोर्ग: धन्यवाद। जैसे ही मैं अपना वर्तमान प्रोजेक्ट पूरा करता हूं, मैं रेल और रूबी पर उठाउंगा, मैंने बहुत प्रशंसा की है कि मैं चिंतित हूं :) –
धन्यवाद। मुझे लगता है कि मैं अब संबंधों के बारे में स्पष्ट हूं। @ Jörg_W_Mittag की जानकारी भी मदद करता है। यही है, कक्षाएं और मेटाक्लास दो अलग-अलग लेकिन अवधारणाएं हैं। – fwoncn