たとえば、次のようなコードがあったとします。
result = data.inject([]) {|a,c| ((c.x) > 10) ? a << c.y : a }
ブロックの中がグチャグチャしてますね。
こういう時は、素直に
result2 = data.select {|e| e.x > 10}.map(&:y)
その上、この形式ならlazyを適用する事もできます。
数が膨大な時は有利ですね。
result3 = data.lazy.select {|e| e.x > 10}.map(&:y) #>> #<Enumerator::Lazy: #<Enumerator::Lazy: #<Enumerator::Lazy: [#<struct Point x=20, y=22>, #<struct Point x=2, y=8>, #<struct Point x=22, y=30>, #<struct Point x=-8, y=9>]>:select>:map>
これなら、数が多くなった場合有利?