2010-05-18 12 views
5

मैं मेटाप्रोग्रामिंग रूबी पढ़ रहा हूं और ऑब्जेक्ट मॉडल चिकन या अंडा दुविधा की तरह है।रुबी के ऑब्जेक्ट मॉडल में सबसे पहले क्या आता है?

रूबी 1.8 में, ऑब्जेक्ट क्लास कक्षा का एक उदाहरण है। मॉड्यूल का सुपरक्लास ऑब्जेक्ट है और कक्षा का एक उदाहरण है। कक्षा 'सुपरक्लास मॉड्यूल है, और यह वर्ग (आत्म-संदर्भ) का एक उदाहरण है। क्लास SomeClass कहो; अंत कहीं परिभाषित किया गया है; कुछ क्लास कक्षा का एक उदाहरण है, हालांकि इसका सुपरक्लास ऑब्जेक्ट है। क्लास के उदाहरण में ऑब्जेक्ट के बजाय सुपरक्लास के रूप में ऑब्जेक्ट क्यों होता है?

इसके अलावा, यदि वस्तु मौजूद है, तो कक्षा मौजूद है, लेकिन फिर मॉड्यूल मौजूद होना है, लेकिन मॉड्यूल मौजूद होने के लिए ऑब्जेक्ट मौजूद होना है। इन वर्गों को कैसे बनाया गया है?

उत्तर

5

यहां एक संपूर्ण रूबी वर्ग रेखाचित्र (रूबी 1.8 के लिए) है: http://banisterfiend.wordpress.com/2008/11/25/a-complete-ruby-class-diagram/

आप वर्ग रेखाचित्र यह पता चला है कि कक्षा संकेत और सुपर वर्ग संकेत उपयोगी है की अजीब असंभव लगने वाली आत्म कर्मकर्त्ता प्रकृति को समझने में मदद करने के सी एपीआई में किसी भी समय असाइन किया जा सकता है। यही है, आप एक ऑब्जेक्ट (सी एपीआई में) बना सकते हैं और बाद में यह तय कर सकते हैं कि कक्षा और सुपर क्लास पॉइंटर्स क्या इंगित करते हैं।

इसके अलावा, परिभाषा के आदेश को समझने के लिए, object.c में Init_Object() को देखो (रूबी 1.9 में)

rb_cBasicObject = boot_defclass("BasicObject", 0); 
rb_cObject = boot_defclass("Object", rb_cBasicObject); 
rb_cModule = boot_defclass("Module", rb_cObject); 
rb_cClass = boot_defclass("Class", rb_cModule); 

metaclass = rb_make_metaclass(rb_cBasicObject, rb_cClass); 
metaclass = rb_make_metaclass(rb_cObject, metaclass); 
metaclass = rb_make_metaclass(rb_cModule, metaclass); 
metaclass = rb_make_metaclass(rb_cClass, metaclass); 
boot_defmetametaclass(rb_cModule, metaclass); 
boot_defmetametaclass(rb_cObject, metaclass); 
boot_defmetametaclass(rb_cBasicObject, metaclass); 

कहाँ rb_cBasicObject रूबी में BasicObject है, rb_cObject रूबी में Object है, और इतने पर।

1

विचार करने के लिए सबसे आसान काम है कि रूबी में सब कुछ एक वस्तु है। बाकी सब कुछ इस अवधारणा का एक संशोधन है। इसलिए कक्षा वर्ग ऑब्जेक्ट को संशोधित करके कार्यक्षमता की तरह वर्ग जोड़ता है। नतीजतन प्रत्येक वस्तु एक वर्ग है, आदि

ऑब्जेक्ट का सुपरक्लास शून्य है। (Reference)

ऑब्जेक्ट का सुपरक्लास BasicObject (1.9 में) है और BasicObject का सुपरक्लास शून्य है।

+0

ठीक है, तो वस्तु (1.8 में) पहले बनाई गई है और फिर बाद में तो यह है कि वस्तु # वर्ग संशोधित किया गया है कक्षा है? – Timothy

1

आप रूबी हैकिंग गाइड में कुछ और जानकारी पा सकते हैं: http://rhg.rubyforge.org/

विशेष रूप से अध्याय 04: बूटस्ट्रैप

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