Ich habe mehrere Methoden, die ähnliche bedingte Logik haben und ich denke, es ist sinnvoll, sie zu trocknen.Anruf super im Zusammenhang mit dieser Methode Anrufer
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
Ist es möglich, eine #puts_or_super
zu schaffen, die super
ihrer Anrufer zu nennen wäre in der Lage? (B#parent1
oder B#parent2
) So wird der Code wie folgt aussehen:
def parent1(val)
puts_or_super(val, "foo")
end
def parent2(val)
puts_or_super(val, "bar")
end
bearbeiten: Das funktioniert aber sieht verrückt
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
Noch bessere Lösungen?
'Super' wird für Klassenvererbung verwendet. Sie verwenden zwei verschiedene Methoden. Können Sie Ihr Beispiel erweitern, um zu zeigen, in welchen Klassen Sie Ihr Beispiel verwenden möchten? Und was willst du anrufen? – knut
Nun, ich wollte es einfach halten. Sowohl "parent1" als auch "parent2" gehören zu einer Klasse, die von einer anderen geerbt wird. – freemanoid