2009-09-07 10 views
5

रूबी (1.8.एक्स)ऑब्जेक्ट दोनों में कर्नेल क्यों शामिल है और रूबी में इसका उत्तराधिकारी क्यों है?

ऑब्जेक्ट दोनों कर्नेल से क्यों वंचित हैं और इसे शामिल करते हैं? विरासत में पर्याप्त नहीं होगा?

 
irb(main):006:0> Object.ancestors 
=> [Object, Kernel] 
irb(main):005:0> Object.included_modules 
=> [Kernel] 
irb(main):011:0> Object.superclass 
=> nil 

नोट रूबी 1.9 में स्थिति समान है (लेकिन थोड़ा क्लीनर):

 
irb(main):001:0> Object.ancestors 
=> [Object, Kernel, BasicObject] 
irb(main):002:0> Object.included_modules 
=> [Kernel] 
irb(main):011:0> Object.superclass 
=> BasicObject 
irb(main):011:0> BasicObject.superclass 
=> nil 
irb(main):011:0> BasicObject.included_modules 
=> [] 

उत्तर

12

ObjectKernel से विरासत नहीं है, यह (रूबी 1.8 में) अंतिम सुपर क्लास है। #ancestors विधि के परिणाम सुपरक्लास और मॉड्यूल शामिल हैं। विशेष रूप से, क्रम में वे किसी विशेष कॉल के लिए देखे जाते हैं।

+2

नीचे की रेखा, पूर्वजों और सुपरक्लास को भ्रमित नहीं किया जाना चाहिए –

5

जब आप कक्षा में मॉड्यूल शामिल करते हैं तो यह अपने विरासत पदानुक्रम का हिस्सा बन जाता है। इसलिए कर्नेल ऑब्जेक्ट.कैंस्टर्स सहित इसमें शामिल होगा (कोई पन इरादा नहीं) कर्नेल। रूबी संस्करणों में < 1.9 ऑब्जेक्ट पदानुक्रम के शीर्ष पर है इसलिए इसमें कोई सुपरक्लास नहीं है

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