module Enumerable
    def collect_one(default=nil)
      inject(default) do |d,e|
        if v = yield(e)
          break v
        else
          d
        end
      end
    end
  end

So this:

  element = %w(a bb ccc).detect{|e| /b/ =~ e}
  size = (element ? element.size : 0)

Becomes this:

  size = %w(a bb ccc).collect_one(0){|e| e.size if /b/ =~ e}

Discussion starter: does the name communicate?

Posted by Nathaniel on Mar 1st, 2007

You can still contact Nathaniel at nathaniel@terralien.com