Inicialización flexible

Hemos visto que una vez que se asocia un argumento al método initialize no se puede omitir sin que se genere un error. Si queremos ser más considerados podemos utilizar el argumento si se proporciona, y en caso contrario, recurrir al valor por defecto.

  ruby> class Fruta
  ruby|   def initialize(k="manzana")
  ruby|     @kind = k
  ruby|     @condition = "madura"
  ruby|   end
  ruby| end
  nil
  ruby> f5 = Fruta.new "pera"
  una pera madura
  ruby> f6 = Fruta.new
  una manzana madura
  

Se pueden utilizar los valores por defecto de un argumento en cualquier método no sólo en initialize. Los argumentos hay que organizarlos de tal forma que aquellos con valores por defecto aparezcan al final de la lista.

A veces es útil tener varias formas de inicializar un objeto. Aunque está fuera del ámbito de este tutorial, Ruby permite reflexión sobre los objetos y listas de argumentos de tamaño variable. Ambas técnicas combinadas permiten realizar sobrecarga de métodos.