[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Handy method Object#in?

Kamil

11/13/2007 3:31:00 PM

I wish there would be this simple method in the core:

class Object
def in?(an_array)
an_array.include?(self)
end
end

Having that it's nice to write:

a = %w(hello world out there)
puts 'world'.in?(a)

And it works with Interval instance too.

5 Answers

David A. Black

11/13/2007 3:47:00 PM

0

Hi --

On Wed, 14 Nov 2007, Kamil wrote:

> I wish there would be this simple method in the core:
>
> class Object
> def in?(an_array)
> an_array.include?(self)
> end
> end
>
> Having that it's nice to write:
>
> a = %w(hello world out there)
> puts 'world'.in?(a)
>
> And it works with Interval instance too.

This is a bit of a perma-thread on this mailing list. I guess it's
hard to Google for :-) But it's been talked about a lot.


David

--
Upcoming training by David A. Black/Ruby Power and Light, LLC:
* Advancing With Rails, Berlin, Germany, November 19-22
* Intro to Rails, London, UK, December 3-6 (by Skills Matter)
See http://www.r... for details!

Trans

11/13/2007 4:52:00 PM

0



On Nov 13, 10:35 am, Kamil <kamil.kuk...@gmail.com> wrote:
> I wish there would be this simple method in the core:
>
> class Object
> def in?(an_array)
> an_array.include?(self)
> end
> end
>
> Having that it's nice to write:
>
> a = %w(hello world out there)
> puts 'world'.in?(a)

concise, but it inverts the oop flow. is it really a big deal to do:

a.include?('world')

t.


Peña, Botp

11/15/2007 1:17:00 PM

0

From: Trans [mailto:transfire@gmail.com]=20
# On Nov 13, 10:35 am, Kamil <kamil.kuk...@gmail.com> wrote:
# > I wish there would be this simple method in the core:
# > class Object
# > def in?(an_array)
# > an_array.include?(self)
# > end
# > end
# > Having that it's nice to write:
# > a =3D %w(hello world out there)
# > puts 'world'.in?(a)
# concise, but it inverts the oop flow. is it really a big deal to do:
# a.include?('world')

i'm not sure what you mean by oop flow, but i use it like,

obj=3D"world"
array =3D %w(hello world out there)

obj.method if obj in? array
=20
in english eg, i'd say

john will swim if he is on the swimming team.

not

john will swim if the swimming team includes him (??) [ or replace =
include w other relevant words]

but yes, that is english, so in ruby we prefer the latter? (just =
teasing ;-)

in fact, i would even like to extend #in? to return the position (if =
array) or pair (if hash) of obj in collection (nil otherwise); currently =
include?only returns plain true/false.

kind regards -botp
=20
ps: heheh, note that i'm also using #in in facets among other things :) =
why (in ruby) can't an object ask itself if it's a member of a =
collection??


Trans

11/15/2007 2:53:00 PM

0



On Nov 15, 8:16 am, "Pena, Botp" <b...@delmonte-phil.com> wrote:
> From: Trans [mailto:transf...@gmail.com]
> # On Nov 13, 10:35 am, Kamil <kamil.kuk...@gmail.com> wrote:
> # > I wish there would be this simple method in the core:
> # > class Object
> # > def in?(an_array)
> # > an_array.include?(self)
> # > end
> # > end
> # > Having that it's nice to write:
> # > a = %w(hello world out there)
> # > puts 'world'.in?(a)
> # concise, but it inverts the oop flow. is it really a big deal to do:
> # a.include?('world')
>
> i'm not sure what you mean by oop flow, but i use it like,
>
> obj="world"
> array = %w(hello world out there)
>
> obj.method if obj in? array
>
> in english eg, i'd say
>
> john will swim if he is on the swimming team.
>
> not
>
> john will swim if the swimming team includes him (??) [ or replace include w other relevant words]
>
> but yes, that is english, so in ruby we prefer the latter? (just teasing ;-)

true enough, computer language tend to force different order though.
try to imagine it forth ;)

> in fact, i would even like to extend #in? to return the position (if array) or pair (if hash) of obj in collection (nil otherwise); currently include?only returns plain true/false.

not a bad idea.

> kind regards -botp
>
> ps: heheh, note that i'm also using #in in facets among other things :) why (in ruby) can't an object ask itself if it's a member of a collection??

Haha! yep. you got me ;) but i think its fine for add-on, i mean Ruby
can't do everything on it's own, can it ;)

the reason ruby itself should not, is because it adds a method to all
objects that simply inverts the actual oop order. techincally we could
do that with just about every method.

a.index(e)
e.index_of(a)

h.key?(k)
k.key_of?(h)

etc.

Now this reminds me though, why don't we have String#puts ?

t.

Sean O'Halpin

11/17/2007 2:51:00 AM

0

On Nov 13, 2007 3:35 PM, Kamil <kamil.kukura@gmail.com> wrote:
> I wish there would be this simple method in the core:
>
> class Object
> def in?(an_array)
> an_array.include?(self)
> end
> end
>
> Having that it's nice to write:
>
> a = %w(hello world out there)
> puts 'world'.in?(a)
>
> And it works with Interval instance too.
>

It is nice, but I would advise you to profile code that uses it and
ask yourself if it is worth the cost.

Regards,
Sean