I don't always go to the online reference when coding a
construct I have never used before. It is one of the
strengths of Ruby that it is intuitive, generalized, and
flexible. I think matz has an idea of "least surprise"
that coincides with that of most programmers.

But sometimes I am surprised, and sometimes I am just
confused. In this case, I have become more confused 
the more I think about it.

Initially I was thinking, "What is the *right* way to
print a range of numbers backwards?" It is mostly 
irrelevant to me whether they are stored or not. I was
initially thinking of storing them. (Conrad's suggestion
of 10.downto(1) is good if they are not to be stored.)

Anyway, after some playing, here is what I found. See
the code below.

--------------------------------
#!/bin/ruby

a=Array(1..5)
b=1..5
c=[1..5]
d=[1,2,3,4,5];

if c=d
  print "c and d are the same\n"
else
  print "c and d are NOT the same\n"
end
# Above: Confirms that c and d are the same

# Case 1 - works as expected.
a.reverse.each { |i| print i, "\n"}

# Case 2 - error
# b.reverse.each { |i| print i, "\n"}
# Above line gives error message below:
# foo2.rb:15: undefined method `reverse' for
#<Range:0x20050560> (NameError)

# Case 3 - works as expected
c.reverse.each { |i| print i, "\n"}

# Case 4 - range constant
# 1..5.reverse.each { |i| print i, "\n"}
# Code above gives error below... probably precedence
issue
# foo2.rb:27: undefined method `reverse' for 5:Fixnum
(NameError)

# Case 5 - same as 4, but with parens
# (1..5).reverse.each { |i| print i, "\n"}
# Code above gives error below... interesting
# foo2.rb:32: undefined method `reverse' for
#<Range:0x2004ff48> (NameError)

# Case 6 - array constant with range - prints "1..5" -
surely a bug???
[1..5].reverse.each { |i| print i, "\n"}

# Case 7 - array constant, non-range - works as expected
[1,2,3,4,5].reverse.each { |i| print i, "\n"}

--------------------------------

1. Notice especially that an array variable and an array
constant with the same value are treated differently.

2. Is it unreasonable to expect 'reverse' to be imple-
mented for a range?

3. Is it unreasonable to expect that a range assigned to
an array will populate the array?

Thanks for any comments...
Hal