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.