रुबी - क्या एक विधि ओवरलोडेड के समान नाम के साथ सुपरक्लास की विधि को कॉल करने का कोई तरीका है - रूबी, ओओपी

क्या ऐसा कुछ करना संभव है:

class A
def a(var)
puts "do something with #{var}"
end
end

class B < A
def a(var)
var = var + "some modification"
#this is what I want to do:
super.a(var)
end
end

धन्यवाद!

उत्तर:

उत्तर № 1 के लिए 4

जब तक मैं आपके सवाल को गलत नहीं कहूंगा, आपको कॉल करने में सक्षम होना चाहिए super अपने आप; उदा .:

class A
def a(var)
puts "do something with #{var}"
end
end

class B < A
def a(var)
var = var + "some modification"
#this is what I want to do:
#super.a(var)
super
end
end

v = B.new
v.a("hey")

पैदा करता है

$ ruby test.rb
do something with heysome modification

जवाब के लिए 2 № 2

आप के साथ एक विधि नाम का उपयोग नहीं कर सकते हैं super कॉल

यदि तुम प्रयोग करते हो super उस पर अपने आप को कॉल करेंगे super वर्ग "एक ही तर्क के साथ पारित कार्यान्वयन

class A
def a(var)
puts var
end
end

class B < A
def a(var)
super
end
end

B.new.a(1) #=> 1

यदि आप चर को संशोधित करना चाहते हैं तो आप या तो फिर से असाइन कर सकते हैं var तर्क या एक का उपयोग करें super तर्क में गुजरने के लिए कॉल करें

class A
def a(var)
puts var
end
end

class B < A
def a(var)
var = 2
super
end
end

B.new.a(1) #=> 2

या

class A
def a(var)
puts var
end
end

class B < A
def a(var)
super(2)
end
end

B.new.a(1) #=> 2

जवाब के लिए 0 № 3

नीचे आज़माएं:

class A
def a(var)
puts "do something with #{var}"
end
end

class B < A
def a(var)
var = var + "some modification"
#this is what I want to do:
#super.a(var)
self.class.superclass.instance_method(:a).bind(self).call 12
end
end

v = B.new
v.a("hello")

आउटपुट:

do something with 12

और एक:

class A
def a(var)
puts "do something with #{var}"
end
end

class B < A
alias :old_a :a
def a(var)
var = var + "some modification"
#this is what I want to do:
#super.a(var)
old_a 12
end
end

v = B.new
v.a("hello")

आउटपुट:

do something with 12

संबंधित सवाल
सबसे लोकप्रिय