मैं रूबी के लिए एक न्यूबी हूँ। मैं निष्पादन की वर्तमान पंक्ति की विधि युक्त क्लास ऑब्जेक्ट प्राप्त करने का एक तरीका ढूंढ रहा हूं। क्या यह वर्गनाम को हार्डकोड किए बिना संभव है?रूबी: क्या कक्षा निर्धारित करना संभव है कि मेरी रूबी विधि क्लासनाम को हार्डकोड किए बिना निष्पादित कर रही है?
# hardcoded example
class A
def to_s
"I am a " + A.to_s # Class "A" is hardcoded here. Is there another way to reference the class A?
end
end
मैंने सोचा कि शायद self.class
काम करेगा, लेकिन यह मुझे नहीं दिया मैं जब कक्षा subclassed है के लिए क्या देख रहा था।
# Following Outputs=> I am a Camel I am a Camel I am a Camel
# but I want => I am a Camel I am a Mammal I am a Animal
class Animal
def to_s
"I am a " + self.class.to_s
end
end
class Mammal < Animal
def to_s
"I am a " + self.class.to_s + " " + super
end
end
class Camel < Mammal
def to_s
"I am a " + self.class.to_s + " " + super
end
end
puts Camel.new()
तो, क्या कोई कीवर्ड, विधि या कुछ है जो युक्त कक्षा तक पहुंचने की अनुमति देता है?
वास्तव में अच्छा, मैंने इसके बारे में नहीं सोचा था! ध्यान दें कि ओपी प्रस्तावित वाक्यविन्यास के लिए आपको 'class.nesting.first.name' की आवश्यकता होगी। इसके अलावा, ओपी ने एक टिप्पणी में लिखा कि वह मॉड्यूल नहीं चाहता था, इसलिए कुछ तर्क की आवश्यकता हो सकती है। वैसे भी मामूली नाइटपिक्स हैं: बधाई हो! –
नेस्टिंग लेक्सिकल संदर्भ है, इसलिए यह हमेशा कक्षा पर परिभाषित विधि के लिए एक कक्षा होगी। (एक असंबंधित नोट पर, मुझे लगता है कि ओपी ने अपने लिंग को कभी भी "वे" सर्वनाम का सबसे अच्छा उपयोग नहीं किया।) – akuhn
विधि प्रीपेड मॉड्यूल से भी हो सकती है, है ना? मैंने कभी भी 'वे' का उपयोग नहीं किया है। मैं अगली बार ओपी उपयोगकर्ता नाम का उपयोग करूंगा। –