मेरे पास निम्न रूबी कोड है जो सुपरक्लास में परिभाषित एक विधि के बाल वर्ग में alias पेश करता है, और बाल वर्ग में ओवरराइड किया जाता है:

class Parent
  def hello
    print "Hello, I'm Parent!"
  end
end

class Child < Parent
  alias greet hello
  def hello
    print "Hi, I'm Child!"
  end
end

जब मैं Child के उदाहरण पर greet उपनाम को कॉल करता हूं, तो यह Parent के कार्यान्वयन को hello कहता है, न कि अपने स्वयं के वर्ग के कार्यान्वयन को। उदाहरण के लिए, उपरोक्त कोड आईआरबी में लोड के साथ:

2.3.3 :001 > child = Child.new
 => #<Child:0x007fb1118a8f58> 
2.3.3 :002 > child.hello
Hi, I'm Child! => nil 
2.3.3 :003 > child.greet
Hello, I'm Parent! => nil 
2.3.3 :004 > 

माता-पिता वर्ग कार्यान्वयन के बजाय विधि के स्थानीय कार्यान्वयन को इंगित करने के लिए मैं उपनाम कैसे प्राप्त कर सकता हूं?

1
Jon Schneider 12 अक्टूबर 2018, 21:31

1 उत्तर

सबसे बढ़िया उत्तर

alias को अलियास करने की विधि के बाद स्थित होना चाहिए, पहले नहीं।

चाइल्ड क्लास के लिए इस संशोधित कोड में greet का उपनाम hello के स्थानीय कार्यान्वयन के लिए होगा, जैसा कि इरादा है:

class Child < Parent
  def hello
    print "Hi, I'm Child!"
  end
  alias greet hello
end
2
Jon Schneider 12 अक्टूबर 2018, 18:31