37 votes

ruby : que signifie l'astérisque dans "p *1..10" ?

La ligne

p *1..10

fait exactement la même chose que

(1..10).each { |x| puts x }

ce qui vous donne le résultat suivant :

$ ruby -e "p *1..10"
1
2
3
4
5
6
7
8
9
10

c'est un excellent raccourci pour travailler avec textmate par exemple, mais que fait l'astérisque ? comment ça marche ? je n'ai rien trouvé sur le net...

61voto

Neall Points 12075

C'est le opérateur splat . Vous le verrez souvent utilisé pour diviser un tableau en paramètres d'une fonction.

def my_function(param1, param2, param3)
  param1 + param2 + param3
end

my_values = [2, 3, 5]

my_function(*my_values) # returns 10

Plus couramment, il est utilisé pour accepter un nombre arbitraire d'arguments

def my_other_function(to_add, *other_args)
  other_args.map { |arg| arg + to_add }
end

my_other_function(1, 6, 7, 8) # returns [7, 8, 9]

Cela fonctionne également pour l'affectation multiple (bien que ces deux déclarations fonctionnent sans le splat) :

first, second, third = *my_values
*my_new_array = 7, 11, 13

Pour votre exemple, les deux seraient équivalents :

p *1..10
p 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X