La sintaxis del método de inyección es el siguiente:
inject (value_initial) { |result_memo, object| block }
Vamos a resolver el ejemplo anterior, es decir
[1, 2, 3, 4].inject(0) { |result, element| result + element }
que da como salida.
Por lo tanto, antes de empezar vamos a ver cuáles son los valores almacenados en cada uno variables:
resultado = 0 El cero vino de inyección (valor) que es 0
elemento = 1 Es el primer elemento de la matriz.
Okey !!! Por lo tanto, vamos a empezar a entender el ejemplo anterior
Paso: 1 [1, 2, 3, 4].inject(0) { |0, 1| 0 + 1 }
Paso: 2 [1, 2, 3, 4].inject(0) { |1, 2| 1 + 2 }
Paso: 3 [1, 2, 3, 4].inject(0) { |3, 3| 3 + 3 }
Paso: 4 [1, 2, 3, 4].inject(0) { |6, 4| 6 + 4 }
Paso: 5 [1, 2, 3, 4].inject(0) { |10, Now no elements left in the array, so it'll return 10 from this step| }
Aquí Bold-Italic Los valores son elementos de la matriz y los valores Bold son los valores resultantes.
Espero que entienda el funcionamiento del método #inject
del #ruby
.
Ver [Wikipedia: Fold (función de orden superior)] (http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29): inyectar es un "doblez a la izquierda", aunque (desafortunadamente) a menudo con efectos secundarios en el uso de Ruby. – user2864740