Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   Identifying (http://www.velocityreviews.com/forums/t848026-identifying.html)

Adam Akhtar 02-09-2008 10:00 PM

Identifying
 
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-forum.com/.


Adam Akhtar 02-09-2008 10:01 PM

Re: Identifying
 

> 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-forum.com/.


PullMonkey 02-09-2008 10:07 PM

Re: Identifying
 
[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-forum.com/.
>
>



Stefano Crocco 02-09-2008 10:07 PM

Re: Identifying
 
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 02-09-2008 10:09 PM

Re: Identifying
 
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 02-09-2008 10:14 PM

Re: Identifying
 
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-forum.com/.


Tim Hunter 02-09-2008 10:19 PM

Re: Identifying
 
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/ProgrammingRuby/


--
RMagick: http://rmagick.rubyforge.org/
RMagick 2: http://rmagick.rubyforge.org/rmagick2.html


Christopher Dicely 02-09-2008 10:20 PM

Re: Identifying
 
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 02-09-2008 10:25 PM

Re: Identifying
 
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 02-10-2008 11:46 AM

Re: Identifying
 
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-forum.com/.



All times are GMT. The time now is 08:38 PM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.