Array#inject に渡すブロックは、Arrayのどの要素を与えられても値を返す必要がある。
そのことを忘れると、memoの値が nilになるエラーに出くわす。
失敗の例
配列内の、3より小さな要素の数を数えたい
pry(main)> a = [2,5,1,3,4]
pry(main)> a.inject(0) { |count, num| count + 1 if num < 3 }
NoMethodError: undefined method `+' for nil:NilClass
from (pry):2:in `block in __pry__'
修正例
pry(main)> a = [2,5,1,3,4]
pry(main)> a.inject(0) { |count, num| num < 3 ? count + 1 : count }
=> 2
# コメントで教えていただきました。この例の場合、injectではなくcountを使うことができます。
a.count { |num| num < 3 }
=> 2