Valores por defecto
Ruby deja especificar los valores por defecto de los argumentos, que son usados si no se especifica un valor explícitamente. Se hace esto mediante el operador de asignación (=):
#argumentos.rb def mtd(arg1="Dibya", arg2="Shashank", arg3="Shashank") "#{arg1}, #{arg2}, #{arg3}." end puts mtd puts mtd("ruby")
Hemos usado el operador interpolación #{ }: se calcula la expresión entre paréntesis, y el resultado se añade al string. Lo que obtenemos es:
>ruby argumentos.rb
Dibya, Shashank, Shashank.
ruby, Shashank, Shashank.
>Exit code: 0
Número de argumentos variable
Ruby permite escribir funciones que acepten un número variable de argumentos. Por ejemplo:
def foo(*mi_string) mi_string.each do |palabras| puts palabras end end foo('hola', 'mundo') foo()
El asterisco indica que el número de argumentos puede ser el que se quiera. En este ejemplo, el asterisco toma los argumentos y los asigna a un array (o vector de elementos) llamado mi_string. Haciendo uso de ese asterisco, incluso se pueden pasar cero argumentos; que es lo que pasa con foo().
No hay máximo número de argumentos que podamos pasar a un método.
Argumentos opcionales
Si se quieren incluir argumentos opcionales, tienen que venir después de los argumentos no opcionales:
def arg_opc(a,b,*x) # bien def arg_opc(a,*x,b) # mal
Los argumentos se interpretan de izquierda a derecha, por eso es importante que los argumentos no opcionales vayan en primer lugar. Si los pusiésemos en último lugar, no sabríamos decir donde acaban los argumentos opcionales y donde empiezan los no opcionales.
=begin Ejemplo de como los argumentos se interpretan de izquierda a derecha =end def mtd(a=99, b=a+1) [a,b] end puts mtd