Ruby injeta condicionalmente!

[32] pry(main)> words = %w{mary had a little lamb}                                                                                                                                             
=> ["mary", "had", "a", "little", "lamb"]
[33] pry(main)> total = words.inject(0){ |result, word| word.size + result}
=> 18
[34] pry(main)> total = words.inject(0){ |result, word| word.size + result if word.size > 3}
TypeError: nil can't be coerced into Fixnum
from (pry):52:in `+'

[35] pry(main)>

Isso acontece porque inject envia o resultado da iteração atual para a próxima iteração, então se sua expressão retornar o nilque retornará quando for para had, nil é passado para a próxima iteração e, portanto, a exceção! portanto, é sempre uma boa prática adicionar a instrução else no injetar! como isso:

[35] pry(main)> total = words.inject(0){ |result, word| word.size > 3 ? word.size + result : result}                                                                                           
=> 14
[36] pry(main)>

Aproveitar!

<a href=” http://twitter.com/_rubydubee”> @_rubydubee </a>