Sono nuovo di Ruby e ho uno strano problema con il metodo inject.Classe Nil quando si utilizza l'iniezione di Ruby
Quando faccio:
(1..10).inject(0) {|count,x| count + 1}
il risultato è 10, come previsto. Ma quando faccio
(1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)}
ottengo un errore:
NoMethodError: undefined method `+' for nil:NilClass
from (irb):43
from (irb):43:in `inject'
from (irb):43:in `each'
from (irb):43:in `inject'
from (irb):43
Io non capisco il motivo per cui (presumibilmente) conteggio è pari a zero nel secondo esempio, ma non la prima. In ogni caso, come potrei contare le variabili da 1 a 10 usando l'iniezione?
Se stai usando Rubino 1.8.7+, si potrebbe anche usare conteggio Enumerable #, vale a dire (1..10) .count (e?: Anche) '' –
Come adorabile !! - –
Grazie! Questo ha perfettamente senso ora. In termini di efficienza, il modo inietti è migliore, dal momento che non provoca la creazione di un array aggiuntivo? In questo esempio, non importa molto, ma cosa succede se selezionassimo 1000s di valori da una gamma molto più ampia? –