2008/1/7, Robert Dober <robert.dober / gmail.com>:
> On Jan 7, 2008 5:15 AM,  <scooterm / hotmail.com> wrote:
> > %w{ ant bear cat}.all? {|word| word.length >= 3}   #=> true
> > %w{ ant bear cat}.any? {|word| word.length >= 3}   #=> true
> >
> > Both of these return true or false as expected. The question is
> > is there an equivalent method that returns the original enum object
> > itself (instead of just "true") if the test is satisfied? And nil or
> > false
> > if otherwise?
> For #any? the response to your question is yes, #detect or #find. But see below.

I don't think so.  The OP wanted the enum not the element(s).

> For #all? however there is none, you shall define what you want, the
> first, the last a random element satisfying the block?

He wants the enum.  Like in

def my_test(enum)
  enum.any? {|x| x.length >= 3} ? enum : nil
end

> Does not make too much sense for me, but maybe you could give us a usecase?

That would be good.  At the moment I cannot see the advantage of the
proposed solution because if you wanted to work with the return value
you would have to store it in a local variable anyway.  Otherwise you
would end up invoking an Enumerable method on nil.

> > I know code for this can be easily written, but the reason for the
> > question is a matter of style; because it would be
> > really nice not to have to specify the enum object more than one
> > time if the test is satisfied.
> >
> > For example, in simple english, the "any" test would be: "If any item
> > passes the test, then return all of the items".
> This indeed is just a different case, I myself have enhanced grep to
> do this in my labrador library, so you can say
> enum.grep{|e| e.length > 2 } a common idiom to do this is

The bit above can be done with #select - IMHO no need to enhance #grep for this.

> enum.map{|e| cond(e) ? : e : nil }.compact

What is the advantage of the bit above over

enum.select {|e| cond(e)}

?  Am I missing something?

Kind regards

robert

-- 
use.inject do |as, often| as.you_can - without end