From: anansi Date: 2007-05-06T23:50:04+09:00 Subject: Re: fixnum, range and array into one single loop? Hi thank you both :) I took Tim's answer because it's faster and much smaller and my loop had some timeout-problems with the case-when method to solve it. Tim Hunter wrote: > 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}". -- greets ( ) ( /\ .-"""-. /\ //\\/ ,,, \//\\ |/\| ,;;;;;, |/\| //\\\;-"""-;///\\ // \/ . \/ \\ (| ,-_| \ | / |_-, |) //`__\.-.-./__`\\ // /.-(() ())-.\ \\ (\ |) '---' (| /) ` (| |) ` jgs \) (/ one must still have chaos in oneself to be able to give birth to a dancing star