Heute werfen wir einen Blick auf Rubys Inject-Methode (#inject). Als jeder, der weit genug auf seiner Reise ist, um mehr über das Codieren zu erfahren, wissen Sie, dass Sprachen voller verwirrender, großartiger Methoden und Funktionen sind. Kürzlich bin ich auf eine dieser verwirrenden und, wie ich gelernt habe, großartigen Methoden gestoßen. Ich habe versucht, ein Array von ganzen Zahlen zu summieren, und dachte fälschlicherweise, Ruby hätte eine native #sum Methode, aber kein solches Glück. Also habe ich gegoogelt und #inject gefunden.
Die #inject-Methode verhält sich genauso wie die #reduce-Methode, und sie werden als Aliase betrachtet. Diese Enumeratormethoden können einen Bereich oder ein Array von Zahlen annehmen und optional einen Block empfangen. Wenn sie aufgerufen wird, übergibt die inject-Methode jedes Element und akkumuliert jedes nacheinander.
.inject(:+) => (((3 + 6) + 10) + 13) => 32
ODER
.inject {|sum, number| sum + number} =>|3, 6| 3 + 6 => 9
=>|9, 10| 9 + 10 =>19
Um dies noch weiter aufzuschlüsseln, nimmt inject das erste Element in Ihrer Sammlung und verwendet es als Basis-Summe. Es nimmt dann das nächste Element (oder das zweite Element im Array) und fügt sie dann zusammen. Die Methode weist dieses Ergebnis dann der ‚Summe‘ zu und fügt das nächste Element in der Sammlung hinzu, bis alle Elemente den Block durchlaufen haben. In diesem Fall ist ’sum‘ das, was wir einen Akkumulator nennen — da er die Werte akkumuliert. Der Rückgabewert ist die Summe aller Elemente in der Auflistung.
Diese Methode ist merkwürdig, da Sie ihr auch einen Standardwert für den Akkumulator übergeben können. Siehe unten:
.inject(0, :+) => 32.inject(0) {|sum, number| sum + number} => 19
Hier geben Sie der Methode einen Startwert für den Akkumulator, da ich ihn auf Null übergeben habe, fügt die Methode das erste Element der Sammlung zu Null hinzu, bevor Sie mit dem Hinzufügen des zweiten und dritten Elements in der Sammlung fortfahren.