2009-08-02 16 views

उत्तर

10

कक्षा कक्षा (# प्रकार) पूर्वजों को वापस नहीं देती है। ऑब्जेक्ट्स क्लास क्लास है। कक्षा की कक्षा कक्षा है। कक्षा एक वस्तु है। विज्ञापन में सच्चाई: मैंने रूबी को कभी नहीं सीखा, लेकिन ऑब्जेक्ट-क्लास रिलेशन में है जो 30 साल पहले एक छोटा सा सेट बन गया था।

+4

Metaclasses रूबी में अलग तरह से काम: वे विधि देखने श्रृंखला में इंजेक्शन हो, इस प्रकार रूबी दो समानांतर पदानुक्रम नहीं है कक्षाओं और metaclasses के, लेकिन, जैसा कि आप कहते हैं, मूल बातें समान हैं। –

+0

@ जोर्ग: धन्यवाद। जैसे ही मैं अपना वर्तमान प्रोजेक्ट पूरा करता हूं, मैं रेल और रूबी पर उठाउंगा, मैंने बहुत प्रशंसा की है कि मैं चिंतित हूं :) –

+0

धन्यवाद। मुझे लगता है कि मैं अब संबंधों के बारे में स्पष्ट हूं। @ Jörg_W_Mittag की जानकारी भी मदद करता है। यही है, कक्षाएं और मेटाक्लास दो अलग-अलग लेकिन अवधारणाएं हैं। – fwoncn

5

इस तरह यह गहरे लाल रंग का 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 
6

Object के वर्ग Class है (के बाद से Object अपने आप में एक वर्ग है), और ObjectClass के एक पूर्वज है।

एक परिपत्र संदर्भ है, यह बहुत जटिल है। मेरी व्यक्तिगत सिफारिश, अगर आपको इसके साथ खेलने की ज़रूरत नहीं है, तो वहां मत जाओ।

9

क्लास, वस्तु, मॉड्यूल और अन्य सभी वर्गों उदाहरणों एक वर्ग क्लास :)

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

+0

परिपत्र निर्भरता काम करता है क्योंकि ये सभी अंतर्निर्मित कक्षाएं हैं। वे कोर रूबी रनटाइम का हिस्सा हैं और स्टार्ट-अप पर इस तरह से स्थापित होते हैं और जिस तरह से आप सामान्य रूप से कक्षा जोड़ते हैं, उस पर जोड़ा नहीं जाता है। रनटाइम में पॉइंटर्स सेट अप करने की शक्ति होती है, हालांकि यह चाहता है, और डिजाइनर ने इसे इस तरह से करना चुना। –

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