[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 nil
que 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>