2013-02-17 40 views
7

के बारे में:कक्षा << आत्म मतलब क्या है?

class Test 
    class << self 
    def hi 
     puts "Hi there" 
    end 
end 

मैं अपने सिर में छवि निम्नलिखित के साथ आया था:

सब कुछ के बाद से रूबी में एक वस्तु है, वर्ग खुद को वर्ग Class की वस्तुओं रहे हैं। class << self पर कॉल करके आप Test के अंदर से परिभाषा खोलें और कुछ उदाहरण विधियों को इंजेक्ट करें। चूंकि TestClass का एक उदाहरण है, इसलिए आप उन विधियों को उसी तरह कॉल कर सकते हैं जैसे आप अपनी ऑब्जेक्ट्स पर इंस्टेंस विधियों को कॉल करते हैं: Test.hi

class Class 
    def hi 
     puts “Hi there” 
    end 
end 

Test = Class.new(class Test 
end) 
Test.hi 

मैं यह अधिकार मिल रहे:

छद्म कोड है जो मेरे पिछले वाक्य कल्पना करने के लिए मदद करता है के बाद किया जाता है?

उत्तर

4

मान लीजिए कि हमारे पास obj कक्षा A का ऑब्जेक्ट है। इस बिंदु पर, obj के वर्ग के पूर्वज पदानुक्रम है:

[A, ...] 

क्या class << obj; ... end करता है कि यह एक वर्ग B जिसका केवल उदाहरण obj है बनाता है, और obj के पूर्वज पदानुक्रम में कहते हैं ताकि पूर्वज obj के वर्ग के पदानुक्रम हो जाता है:

[B, A, ...] 

आप Test के संदर्भ में class << self; ... end बारे में है, तो यह शरीर के एक वर्ग है जिसका एकमात्र उदाहरणहै हो जाएगा। यदि आप उस शरीर के भीतर एक उदाहरण विधि hi परिभाषित करते हैं, तो वह उस वर्ग के उदाहरणों पर लागू होगा, जो Test है। इसलिए आप Test.hi कर पाएंगे।

+0

तो आप जो कह रहे हैं वह मूल रूप से 'कक्षा' को संशोधित करने के बजाय है, रूबी एक अज्ञात वर्ग बनाता है, जो 'कक्षा' से विरासत में है और 'हाय' विधि परिभाषित की गई है, और 'टेस्ट' ऑब्जेक्ट का वर्ग है? – spacemonkey

+0

हां। यह सही है। – sawa

+0

आखिरकार इसे दरकिनार करने के लिए अच्छा लगा। धन्यवाद! – spacemonkey

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