PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.ruby > very simple question about enum.all? and any?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
very simple question about enum.all? and any?

Réponse
 
LinkBack Outils de la discussion
Vieux 07/01/2008, 04h10   #1
scooterm@hotmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut very simple question about enum.all? and any?

%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?

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".

  Réponse avec citation
Vieux 07/01/2008, 05h38   #2
Aditya Mahajan
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: very simple question about enum.all? and any?

On Sun, 6 Jan 2008, 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?
>
> 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".


%w{ant bear cat}.select{|word| word.length >= 3}

Aditya
  Réponse avec citation
Vieux 07/01/2008, 13h32   #3
Robert Dober
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: very simple question about enum.all? and any?

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.
For #all? however there is none, you shall define what you want, the
first, the last a random element satisfying the block?
Does not make too much sense for me, but maybe you could give us a usecase?

>
> 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

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

HTH
Robert

--
http://ruby-smalltalk.blogspot.com/

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

  Réponse avec citation
Vieux 07/01/2008, 15h37   #4
Robert Klemme
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: very simple question about enum.all? and any?

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

  Réponse avec citation
Vieux 07/01/2008, 21h50   #5
Robert Dober
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: very simple question about enum.all? and any?

On Jan 7, 2008 4:37 PM, Robert Klemme <shortcutter@googlemail.com> wrote:
> 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.

I am not worthy, I am just posting nonsense, arrgh

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

>
> What is the advantage of the bit above over
>
> enum.select {|e| cond(e)}


You tell me
>
> ? Am I missing something?

No I have been quite stupid...

But one thing really strikes me, if OP wanted the enum
e.any? {} && e
e.all? {} && e
would be what he wants, right? I must be quite confused....

Cheers
Robert

>
> Kind regards
>
> robert
>
> --
> use.inject do |as, often| as.you_can - without end
>
>




--
http://ruby-smalltalk.blogspot.com/

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

  Réponse avec citation
Vieux 08/01/2008, 06h03   #6
Robert Klemme
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: very simple question about enum.all? and any?

On 07.01.2008 22:50, Robert Dober wrote:
> But one thing really strikes me, if OP wanted the enum
> e.any? {} && e
> e.all? {} && e
> would be what he wants, right? I must be quite confused....


No, actually this is better than the ternary operator thingy that I
suggested above. Umpf! That's a good example that communities can turn
up better solutions than individuals. (Although, since only Robert was
involved...) :-)

I am still waiting for a proper use case of this though. OP?

Cheers

robert
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 02h49.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,18197 seconds with 14 queries