Method Overloading

Necesitas crear dos versiones diferentes de un método con el mismo nombre: dos métodos que se diferencían en los argumentos que reciben.

Una clas en Ruby sólo puede tener un método con un nombre determinado (si defines un método con el mismo nombre más de una vez, la última definición prevalece, como lo vimes en el ejemplo p038or.rb). Sin embargo, dentro de ese mismo método puedes incluír lógica para tomar diferentes rutas de acción dependiendo del número y tipo de objetos fueron pasados como argumentos.

A continuación tenemos una clase Rectángulo. Puedes inizializar un rectángulo de dos diferentes maneras: pasando las coordenadas de sus esquinas superior izquierda e inferior derecha, o pasando las coordenadads de su esquina superior izquierda y su alto in ancho. Hay sólo un método initialize pero para fines prácticos podemos pretender casi que hay dos.

 1 # El constructor de la clase Rectangulo acepta argumentos
 2 # en cualquiera de las siguientes formas:
 3 #
 4 # Rectangle.new([x_top, y_left], alto, ancho)
 5 # Rectangle.new([x_top, y_left], [x_bottom, y_right])
 6 
 7 class Rectangulo
 8   
 9   def initialize(*args)
10     if args.size < 2 || args.size > 3
11       # podemos modificar aqui posteriormente para generar
12       # una excepcion
13       puts 'Este metodo necesita dos o tres parametros'
14     else
15       if args.size == 2
16         puts 'Dos argumentos'
17       else
18         pets 'Tres argumentos'
19       end
20     end
21   end
22 end
23 
24 Rectangulo.new([10,23], 4, 10)
25 Rectangulo.new([10,23], [14,13])
26 
27 

Desde el punto de vista de la clase Rectangulo, el programa p037rectangulo.rb está incompleto. Sin embargo, es suficiente para demostrar el concepto de method overloading en Ruby.