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