Je suis novice en Ruby et j'ai un problème étrange avec la méthode d'injection.Aucune classe lors de l'utilisation de l'injection Ruby
Quand je fais:
(1..10).inject(0) {|count,x| count + 1}
le résultat est 10, comme prévu. Mais quand je fais
(1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)}
Je reçois une erreur:
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
Je ne comprends pas vraiment pourquoi (probablement) le nombre est nul dans le second exemple, mais pas la première. Dans tous les cas, comment pourrais-je compter de 1 à 10 en utilisant injecter?
Si vous utilisez Ruby 1.8.7+, vous pouvez également utiliser le nombre de Enumerable #, à savoir '(1..10) .count (&: même)' –
Comment adorable !! - –
Merci! Cela prend tout son sens maintenant. En termes d'efficacité, est-ce que l'injection est meilleure, puisqu'elle n'entraîne pas la construction d'un tableau supplémentaire? Dans cet exemple, peu importe, mais que se passerait-il si nous sélectionnions des milliers de valeurs dans une gamme beaucoup plus large? –