On Tue, 19 Jun 2001, Avi Bryant wrote:
> On Tue, 19 Jun 2001, Stephen White wrote:
> > In the spirit of incremental improvement...
> > 
> > Assuming "== []" creates an empty Array for the purpose of comparision,
> > it would be a bit faster to do:
> >   def every(&block)
> >     reject(&block).empty?
> >   end
> >   def none(&block)
> >     find_all(&block).empty?
> >   end
> And a bit faster still to do:
> def every
>   reject{|a| yield a}.empty?
> end
> def none
>   find_all{|a| yield a}.empty?
> end

I don't know about your machine, but on mine, using Ruby 1.6.2, doing
this:

module Enumerable
  def every1(&b) ;reject(&b)==[]; end
  def every2(&b) ;reject(&b).empty?; end
  def every3 ;reject{|a| yield a}.empty?; end
  def every4 ;each {|x| return false if not yield x }; true ; end
end

[:every1,:every2,:every3,:every4].each {|t|
  GC.start
  a=Time.new
  1000.times {(1..1000).send(t){|x| x<=1000 }}
  p Time.new-a
}

4.16  reject(&b)==[]
4.15  reject(&b).empty?
6.80  reject{|a| yield a}.empty?
6.00  shortcutting solution

And the last one goes faster in situations when the result is not always
true.

matju