Ruby Language Injecter, réduire


Exemple

Injecter et réduire sont des noms différents pour la même chose. Dans d'autres langues, ces fonctions sont souvent appelées des plis (comme foldl ou foldr). Ces méthodes sont disponibles sur chaque objet Enumerable.

Inject prend une fonction à deux arguments et l'applique à toutes les paires d'éléments du tableau.

Pour le tableau [1, 2, 3] nous pouvons ajouter tous ces éléments avec la valeur de départ de zéro en spécifiant une valeur de départ et bloquer comme suit:

[1,2,3].reduce(0) {|a,b| a + b} # => 6

Ici, nous passons à la fonction une valeur de départ et un bloc qui dit d'ajouter toutes les valeurs ensemble. Le bloc est d'abord exécuté avec 0 comme a et 1 car b prend alors le résultat de la prochaine a , nous ajoutons alors 1 à la deuxième valeur 2 . Ensuite, nous prenons le résultat de cela ( 3 ) et ajoutons cela au dernier élément de la liste (également 3 ) en nous donnant notre résultat ( 6 ).

Si nous omettons le premier argument, il définira a comme étant le premier élément de la liste. L'exemple ci-dessus est donc identique à:

[1,2,3].reduce {|a,b| a + b} # => 6

De plus, au lieu de passer un bloc avec une fonction, nous pouvons passer une fonction nommée en tant que symbole, soit avec une valeur de départ, soit sans symbole. Avec ceci, l'exemple ci-dessus pourrait être écrit comme:

[1,2,3].reduce(0, :+) # => 6

ou en omettant la valeur de départ:

[1,2,3].reduce(:+) # => 6