[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Identifying

Adam Akhtar

2/9/2008 10:01:00 PM

If you have an array which contains a mixture of say intergers and
nested arrays, how can you determine whether an element is an array or
not

ie in psedo code

array.each do |x|
if x == Array
do something
end

whats the corect way to write the if statement?

Thanks

Adam.
--
Posted via http://www.ruby-....

9 Answers

Adam Akhtar

2/9/2008 10:02:00 PM

0


> ie in psedo code
>
> array.each do |x|
> if x == Array
> do something
> end
>
> whats the corect way to write the if statement?
>
> Thanks
>
> Adam.

in the above array = [1,2,3,[34,56,43,7],6,7] etc
--
Posted via http://www.ruby-....

Charles Snider

2/9/2008 10:07:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

if x.class == Array
or
if x.is_a?(Array)

irb(main):008:0> [1,2,3,[34,56,43,7],6,7].map{|x| x.is_a?(Array)}
=> [false, false, false, true, false, false]


On Feb 9, 2008 3:01 PM, Adam Akhtar <adamtemporary@gmail.com> wrote:

>
> > ie in psedo code
> >
> > array.each do |x|
> > if x == Array
> > do something
> > end
> >
> > whats the corect way to write the if statement?
> >
> > Thanks
> >
> > Adam.
>
> in the above array = [1,2,3,[34,56,43,7],6,7] etc
> --
> Posted via http://www.ruby-....
>
>

Stefano Crocco

2/9/2008 10:08:00 PM

0

Alle Saturday 09 February 2008, Adam Akhtar ha scritto:
> If you have an array which contains a mixture of say intergers and
> nested arrays, how can you determine whether an element is an array or
> not
>
> ie in psedo code
>
> array.each do |x|
> if x == Array
> do something
> end
>
> whats the corect way to write the if statement?
>
> Thanks
>
> Adam.

if x.is_a? Array

Stefano


Farrel Lifson

2/9/2008 10:09:00 PM

0

On 10/02/2008, Adam Akhtar <adamtemporary@gmail.com> wrote:
> If you have an array which contains a mixture of say intergers and
> nested arrays, how can you determine whether an element is an array or
> not
>
> ie in psedo code
>
> array.each do |x|
> if x == Array
> do something
> end
>
> whats the corect way to write the if statement?

Use a case statement:

array.each do |x|
case x
when Array: do something
when Integer: do something
end
end

Farrel

Adam Akhtar

2/9/2008 10:14:00 PM

0

Farrel Lifson wrote:

> Use a case statement:
>
> array.each do |x|
> case x
> when Array: do something
> when Integer: do something
> end
> end

is

when Array: do something

a valid statement??

is

if x == Array

also a valid statement??

i was expecting having to use something like x.is_a as Stefano said.
--
Posted via http://www.ruby-....

Tim Hunter

2/9/2008 10:20:00 PM

0

Adam Akhtar wrote:
> Farrel Lifson wrote:
>
>> Use a case statement:
>>
>> array.each do |x|
>> case x
>> when Array: do something
>> when Integer: do something
>> end
>> end
>
> is
>
> when Array: do something
>
> a valid statement??
>
> is
>
> if x == Array
>
> also a valid statement??
>
> i was expecting having to use something like x.is_a as Stefano said.


when Array:

is valid in the context of a case expression.

if x == Array

is also valid, but will only be true if x is in fact Array, that is

x = Array
if x == Array # will be true

For all other things, it will be false.

Here's an online copy of the 1st Edition of _Programming_Ruby_, which
will help answer these questions:
http://www.ruby-doc.org/docs/Progra...


--
RMagick: http://rmagick.ruby...
RMagick 2: http://rmagick.ruby...rmagick2.html

Christopher Dicely

2/9/2008 10:20:00 PM

0

On Feb 9, 2008 2:00 PM, Adam Akhtar <adamtemporary@gmail.com> wrote:
> If you have an array which contains a mixture of say intergers and
> nested arrays, how can you determine whether an element is an array or
> not
>
> ie in psedo code
>
> array.each do |x|
> if x == Array
> do something
> end
>
> whats the corect way to write the if statement?


Depending on exactly what you want there are two main ways (with
several different ways of expressing the most common):

if x.instance_of? Array ... # tests if x is an Array (strictly)
if x.kind_of? Array ... # test if x is an instance of Array or one of
its descendants
if x.is_a? Array ... # same as kind_of?
if Array === x ... # same as kind_of?, useful to know exists because
it lets you match against classes in case statements

Christopher Dicely

2/9/2008 10:26:00 PM

0

On Feb 9, 2008 2:14 PM, Adam Akhtar <adamtemporary@gmail.com> wrote:
> Farrel Lifson wrote:
>
> > Use a case statement:
> >
> > array.each do |x|
> > case x
> > when Array: do something
> > when Integer: do something
> > end
> > end
>
> is
>
> when Array: do something
>
> a valid statement??

Yes. "when" uses the === method of the object given, and Array is a
constant instance of class Class, and Class#===(obj) (inherited from
Module) is equivalent to obj.kind_of?(self)

>
> is
>
> if x == Array
>
> also a valid statement??

x == Array is a *valid* statement, but it doesn't mean the same thing.

case x
when Array: ...
end

is the same as:

if Array === x then ... end

not:

if x == Array then ... end

> i was expecting having to use something like x.is_a as Stefano said.

As is oft the case with Ruby, there is more than one way to do it.

Adam Akhtar

2/10/2008 11:46:00 AM

0

thats brilliant. ive never seen === before. I thought it was a typo at
first. Ill look into those methods now. Thanks


--
Posted via http://www.ruby-....