Ruby имеет два оператора для генерации диапазона значений. .. - включающий и ... - исключающий.

..

examples/ruby/range_two.rb

for i in 0..3
    puts i
end

Сгенерирует

0
1
2
3

включая начало и конец, так же как это работает в Perl.

...

Если мы будем использовать 3 точки вместо двух, тогда диапазон будет включать нижнюю границу, и не будет включать верхнюю. Так же, как диапазоны range работают в Python.

examples/ruby/range_three.rb

for i in 0...3
    puts i
end

0
1
2

Обратный диапазон

Если граница слева больше, чем граница справа, тогда оператор диапазона не вернет значений.

examples/ruby/range_two_wrong.rb

for i in 7 .. 4
    puts i
end

Значения не возвращаются.

Как вариант, мы можем сгенерировать возрастающий список чисел, а затем вызвать для него метод reverse. Для этого нам нужно сначала сконвертировать диапазон в массив:

examples/ruby/range_two_reverse.rb
for i in (4..7).to_a.reverse
    puts i
end

напечатает:

7
6
5
4

Буквенные диапазоны

В дополнение к созданию диапазонов чисел, Ruby может также создавать буквенные диапазоны:

examples/ruby/range_letters.rb

for i in 'a'..'d'
   puts i
end

a
b
c
d

Диапазоны символов

Но и не только это. Мы можем использовать два любых символа из видимой части таблицы ASCI:

examples/ruby/range_chars.rb

for i in 'Z'..'a'
   puts i
end

Z
[
\
]
^
_
`
a

Диапазоны с переменными

В качестве нижней и верхней границ мы можем использовать переменные:

examples/ruby/range_var.rb

x = 3
y = 6 
for i in x .. y
   puts i
end