Une introduction aux opérateurs Ruby * Splat et double ** Splat

Une introduction aux opérateurs Ruby * Splat et double ** Splat

Avez-vous déjà voulu définir une méthode sans savoir combien d'arguments cela prendra? Passez-vous de longues nuits agitées à souhaiter qu'il y ait un moyen facile de séparer une liste en hash? Eh bien, ne cherchez pas plus loin que les opérateurs splat de Ruby! Il y a tellement de bonnes choses que vous pouvez faire avec ces derniers, mais je vais juste passer en revue les bases ainsi que quelques astuces intéressantes que j'ai découvertes.

Simple * Splat

L'opérateur splat a des utilisations presque infinies. Mais l'idée principale est que chaque fois que vous ne voulez pas spécifier le nombre d'arguments que vous avez, vous utiliserez un opérateur splat. L'exemple le plus simple serait quelque chose comme ceci:

Une autre chose utile est que l'opérateur splat peut transformer un tableau en plusieurs arguments:

arr = ["first", "second", "third"]def threeargs(*arr)#makes three arguments

Vous pouvez également utiliser l'opérateur splat pour saisir n'importe quel segment d'un tableau:

first, *rest, last = ["a", "b", "c", "d"]p first # "a"p rest # ["b", "c"]p last # "d"

Vous remarquerez que la variable rest est toujours un tableau, ce qui est très pratique. Et donc, en suivant le dernier exemple, vous pouvez toujours faire des choses comme ceci:

first, *rest, last = ["a", "b", "c", "d"]p rest[0] # "b"

Ce sont les bases de l'opérateur splat unique, mais je vous exhorte à jouer plus avec lui. Il peut faire des choses comme combiner des tableaux, transformer des hachages et des chaînes en tableaux ou extraire des éléments d'un tableau!

Double ** Splat

L'opérateur double splat est revenu dans Ruby 2.0. C'est assez similaire au splat original avec une différence: il peut être utilisé pour les hachages! Voici un exemple d'utilisation la plus basique d'un double splat.

def doublesplat(**nums) p **numsenddoublesplat one: 1, two: 2 # {:one=>1, :two=>2}

Mettre tous ensemble

J'espère que vous pouvez voir que les possibilités sont infinies en utilisant ces deux ensemble. La principale chose à garder à l'esprit est que vous utilisez des splats comme paramètre dans une méthode lorsque vous n'êtes pas sûr du nombre d'arguments que cette méthode utilisera.

Enfin, j'ai créé une petite fonction qui montre comment vous pouvez filtrer tout argument qui n'est pas une paire clé / valeur en utilisant à la fois un splat simple et un double splat.

def dubSplat(a, *b, **c) p cenddubSplat(1,2,3, 4, a: 40, b: 50)#{:a=>40, :b=>50}

Merci d'avoir lu et maintenant essayez de jouer avec vous-même!