Recherche…


Tableaux de contrainte dans la liste de paramètres

Supposons que vous ayez un tableau:

pair = ['Jack','Jill']

Et une méthode qui prend deux arguments:

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

Vous pourriez penser que vous pourriez simplement passer le tableau:

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

Puisque le tableau n'est qu'un argument, pas deux, Ruby lance une exception. Vous pouvez retirer chaque élément individuellement:

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

Ou vous pouvez utiliser l'opérateur splat pour vous épargner des efforts:

print_pair(*pair)

Nombre variable d'arguments

L'opérateur splat supprime des éléments individuels d'un tableau et les transforme en une liste. Ceci est le plus couramment utilisé pour créer une méthode qui accepte un nombre variable d'arguments:

# 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')

Notez qu'un tableau ne compte que pour un élément de la liste. Vous devez donc nous aussi appeler l'opérateur splat du côté appel si vous souhaitez transmettre un tableau:

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow