Yukihiro Matsumoto wrote:
> Hi,
> 
> In message "Re: For loops don't count down"
>     on Mon, 19 Feb 2007 22:27:02 +0900, SonOfLilit <sonoflilit / gmail.com> writes:
> 
> |Numeric#step counts down:
> |
> |5.step(-1) do |i|
> | #stuff
> |end
> 
> 5.downto(1) do |i|
> end
> 
> matz.

Hello Yukihiro:

Thank you for the reply.  I tried the step, as shown above, and it 
doesn't work, it returns a 5, like so:

   irb(main):013:0> 5.step(-1) do |i|
   irb(main):014:0>   puts i
   irb(main):015:0> end
   => 5

However, adding the 1 parameter does work, like so:

   irb(main):016:0> 5.step(1,-1) do |i|
   irb(main):017:0>   puts i
   irb(main):018:0> end
   5
   4
   3
   2
   1
   => 5

I'm glad that I'm forced to put in the 1 because I wouldn't want it 
counting down to zero without me realizing it.

However, coming from other languages (e.g. Delphi) I still prefer the 
for...end syntax because of the more easily recognizable blocks it 
creates, like so:

   for
     ...
   end

but in time I'm sure I'll get used to seeing number / objects / sets / 
ranges at the beginning of lines and won't be so hung up on keywords 
like "for".

Maybe if the Range#each were smart enough to look at the start and end 
value and count up or down accordingly that would fix things for the 
(5..1) style syntax.  I assume this wouldn't just benefit the "for" but 
would cause less gotcha's wherever ranges were used.

BTW, thank you for creating such a wonderfully OO language.  I looked at 
Python and it seemed a little inconsistent at times, not to mention all 
that __<stuff>__, so I was impressed to find such an rich, clean and OO 
oriented language like Ruby.  I was equally impressed to see how much 
forethought had gone into aspects like sets, iterators, etc.  So, please 
keep up the great work!

Michael