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?
I would have called it collect_first after repressing the impulse to call it either delect or detecollect.