Ho diversi metodi che hanno una logica condizionale simile e penso che sia ragionevole usarli.Chiamata super nel contesto di questo metodo chiamante
class A
def parent1(val)
puts "parent1 A #{val}"
end
def parent2(val)
puts "parent2 A #{val}"
end
end
class B < A
def parent1(val)
if val
puts "foo"
else
super
end
end
def parent2(val)
if val
puts "bar"
else
super
end
end
end
E 'possibile creare un #puts_or_super
che sarebbe in grado di chiamare super
del suo chiamante? (B#parent1
o B#parent2
) Così il codice sarà simile a questa:
def parent1(val)
puts_or_super(val, "foo")
end
def parent2(val)
puts_or_super(val, "bar")
end
Modifica: questo funziona, ma sembra folle
def puts_or_super(val, text)
if val
puts text
else
self.class.superclass.instance_method(caller[0][/`.*'/][1..-2].to_sym).bind(self).call
end
end
Eventuali soluzioni migliori?
'super' è utilizzato per l'ereditarietà della classe. Tu usi due metodi diversi. Puoi estendere il tuo esempio per mostrare, in quali classi vuoi utilizzare il tuo esempio? E cosa vuoi chiamare? – knut
Beh, volevo semplicemente renderlo semplice. Sia 'parent1' e' parent2' sono in una classe che è ereditata da un'altra. – freemanoid