209 votes

En quoi consiste un double * (splat) opérateur

Avez-vous vu une fonction déclarée comme ça ?

Je comprends qu’un seul est l’opérateur de splat. Que signifie veux dire ?

360voto

Dogbert Points 44003

Ruby 2.0 a présenté les arguments de mot-clé, et agit comme , mais pour les arguments de mot clé. Elle retourne un hachage avec la clé / valeur paires.

Pour que ce code :

Voici une démo :

42voto

Daniel Rikowski Points 27193

C'est le double splat opérateur qui est disponible depuis Ruby 2.0.

Il capture tous les arguments mots-clefs (qui peut aussi être une simple hachage, qui a été le idiomatiques façon d'imiter mot-clé arguments avant de faire partie du langage Ruby)

def my_method(**options)
  puts options.inspect
end

my_method(key: "value")

Le code ci-dessus imprime {key:value} à la console.

Tout comme l'unique splat opérateur saisit tous les arguments, mais au lieu d'un tableau , vous obtenez un hachage.

Exemple réel:

Par exemple dans les Rails de l' cycle méthode ressemble à ceci:

def cycle(first_value, *values)
  options = values.extract_options!
  # ...
end

Cette méthode peut être appelée comme ceci: cycle("red", "green", "blue", name: "colors").

C'est tout à fait un modèle commun: Vous acceptez une liste d'arguments et la dernière est une des options de hachage, ce qui peut être extrait - par exemple - à l'aide de ActiveSupport de l' extract_options!.

En Ruby 2.0, vous pouvez simplifier ces méthodes:

def cycle(first_value, *values, **options)
  # Same code as above without further changes!
end

Certes c'est seulement une légère amélioration si vous utilisez déjà ActiveSupport mais pour la plaine de Ruby le code des gains de beaucoup de concision.

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