Я новичок в Ruby, и у меня возникла странная проблема с методом инъекции.Класс Nil при использовании Ruby injection
Когда я делаю:
(1..10).inject(0) {|count,x| count + 1}
результат 10, как и ожидалось. Но когда я
(1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)}
Я получаю сообщение об ошибке:
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
Я не понимаю, почему (предположительно) граф равен нулю во втором примере, но не первый. В любом случае, как я буду считать evens от 1 до 10, используя инъекцию?
Если вы используете Ruby, 1.8.7+, вы можете также использовать Enumerable подсчет #, т.е. '(1..10) .count (&: даже)' –
Как очаровательны !! - –
Спасибо! Теперь это имеет смысл. С точки зрения эффективности, лучше ли внедрить путь, так как он не создает лишний массив? В этом примере это не имеет большого значения, но что, если мы выбираем 1000 значений из гораздо большего диапазона? –