Ich versuche, die folgenden Funktionen ausführen:Kann man Polymorphie durch Überladung machen?
class SUM
def make_sum (number)
return number+number
end
def make_sum (number_a, number_b)
return number_a+number_b
end
end
operation = SUM.new
operation.make_sum(5) # returns 10
operation.make_sum(2, 3) # returns 5
make_sum Verfahren nach einem Eingang neu definiert durch den ein mit zwei Eingängen.
Ich stimme Jonny zu. Es handelt sich zwar nicht streng um ein Duplikat in Bezug auf die Frage, aber es berührt die Art des Problems: "Anzahl der Argumente", "Arten von Argumenten" usw. wird eigentlich eher als "Überladung" denn als "Polymorphismus" bezeichnet. Polymorphismus ist eine etwas andere Sache, und Multiple-Dispatch ist auch eine andere Sache als "Anzahl der Eingaben". Die Frage "Warum nicht Rubin (..)" zeigt, dass das Überladen nicht unterstützt wird und warum und das fasst diese Frage auch zusammen. – quetzalcoatl
Wie jedoch Keith und Marcus in ihren Antworten zeigen, können Sie, auch wenn das 'Überladen' nicht möglich ist, mit '* args' Trick simulieren - Argumente als Array nehmen, die Länge dieses Arrays untersuchen und dann etwas anderes machen auf dieser Länge. Aber das ist weder Polymorphismus, noch Überlastung. Das ist nur manuelle Codierung ohne objektorientierten Namen (da es nichts mit OO zu tun hat :)). Ein gebräuchlicher Name dafür ist nur "splat args" oder "splat operator". [Siehe hier für einige Beispiele] (http://jacopretorius.net/2012/01/splat-operator-in-ruby.html) – quetzalcoatl
Nein, Sie können nicht zwei Methoden mit demselben Namen, aber verschiedenen Argumenten in Ruby definieren. Der letzte hat gewonnen, die erste Methodendefinition ist nicht mehr da. – jrochkind