From: Tim Hunter Date: 2007-05-06T22:39:22+09:00 Subject: Re: fixnum, range and array into one single loop? anansi wrote: > Hi, > I'm struggeling with writing a little script. It has a loop just e.g. > like this: > > for x in 1..10 do > begin > puts "#{x}" > end > > The userinput is the loop count (so above the userinput would have > been 1..10): but now this userinput can be a fixnum like 12 or 36 or > it can be a range like 1..10 or 24..84 or an array like [23,41,35,63] > and for every 3 different input kinds the loop shall do the same. > > Like in this example: > > If userinput is just fixnum 11 it just prints 11 on the screen, is it > a range from 1..10 all numbers from 1..10 shall be printed and for an > array all single numbers stored in the array...you know what I mean. > The actual routine doesn't print anything it's just about I have to > process numbers which can the user give in, in three different ways > and I was wondering if it is possible to build this into one single > loop and not three different ones? > Assuming that userinput can only be a Range, Array, or Fixnum...both Range and Array have an each method. Test userinput to see if it responds to :each. If it does, you're golden. If it doesn't, it's a Fixnum. Make an array from the Fixnum by calling Array(). Now iterate over the result using :each. (This is untested but it'll give you an idea of what to do.) userinput = Array(userinput) unless userinput.respond_to? :each userinput.each do |x| puts x end P.S. the puts method converts its argument to a string. You don't need to use "#{x}". -- RMagick [http://rmagick.rubyforge.org] RMagick Installation FAQ [http://rmagick.rubyforge.org/install-faq.html]