Ruby Language Iniettare, ridurre


Esempio

Inietta e riduci sono nomi diversi per la stessa cosa. In altre lingue queste funzioni sono spesso chiamate pieghe (come foldl o foldr). Questi metodi sono disponibili su ogni oggetto Enumerable.

Inject prende una funzione a due argomenti e la applica a tutte le coppie di elementi nella matrice.

Per l'array [1, 2, 3] possiamo aggiungere tutti questi insieme al valore iniziale di zero specificando un valore iniziale e un blocco in questo modo:

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

Qui passiamo alla funzione un valore iniziale e un blocco che dice di aggiungere tutti i valori insieme. Il blocco viene prima eseguito con 0 come a 1 come b , quindi prende il risultato di ciò come il successivo a , quindi aggiungiamo 1 al secondo valore 2 . Quindi prendiamo il risultato di questo ( 3 ) e lo aggiungiamo all'elemento finale nella lista (anche 3 ) dandoci il nostro risultato ( 6 ).

Se si omette il primo argomento, verrà impostato a ad essere il primo elemento della lista, quindi l'esempio di cui sopra è la stessa:

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

Inoltre, invece di passare un blocco con una funzione, possiamo passare una funzione con nome come simbolo, con un valore iniziale o senza. Con questo, l'esempio precedente potrebbe essere scritto come:

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

o omettendo il valore iniziale:

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