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

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/\.

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

Use a case statement:

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

Farrel

···

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?

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

···

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?

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/\.

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/\.

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: Programming Ruby: The Pragmatic Programmer's Guide

···

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

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.

···

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

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