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.

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

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 10/02/2008, Adam A. [email protected] wrote:

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

Alle Saturday 09 February 2008, Adam A. ha scritto:

whats the corect way to write the if statement?

Thanks

Adam.

if x.is_a? Array

Stefano

Adam A. wrote:

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/

Farrel L. 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.

On Feb 9, 2008 2:00 PM, Adam A. [email protected] wrote:

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:14 PM, Adam A. [email protected] wrote:

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.

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