Buscar..


Coaccionar matrices en la lista de parámetros

Supongamos que tienes una matriz:

pair = ['Jack','Jill']

Y un método que toma dos argumentos:

def print_pair (a, b)
  puts "#{a} and #{b} are a good couple!"
end

Podría pensar que podría pasar la matriz:

print_pair(pair) # wrong number of arguments (1 for 2) (ArgumentError)

Dado que la matriz es solo un argumento, no dos, Ruby lanza una excepción. Se podía sacar cada elemento de forma individual:

print_pair(pair[0], pair[1])

O puede usar el operador splat para ahorrarse algo de esfuerzo:

print_pair(*pair)

Número variable de argumentos

El operador splat elimina elementos individuales de una matriz y los convierte en una lista. Esto se usa más comúnmente para crear un método que acepta un número variable de argumentos:

# First parameter is the subject and the following parameters are their spouses
def print_spouses(person, *spouses)
  spouses.each do |spouse|
    puts "#{person} married #{spouse}."
  end
end

print_spouses('Elizabeth', 'Conrad', 'Michael', 'Mike', 'Eddie', 'Richard', 'John', 'Larry')

Tenga en cuenta que una matriz solo cuenta como un elemento en la lista, por lo que también necesitará utilizar el operador splat en el lado de la llamada si tiene una matriz que desea aprobar:

bonaparte = ['Napoleon','Joséphine','Marie Louise']
print_spouses(*bonaparte)    


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow