![]() |
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/. |
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/. |
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/. > > |
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 |
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 |
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/. |
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 |
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 |
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. |
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.