Для лучшего запоминания напишу примеры циклов в руби.

1.upto(8) do |x|
 print "номер #{x}\n"
end
перебор от 1 до 8 включительно, текущее значение положить в "x"
8.times do |x|
 print "номер #{x}\n"
end
перебор от 0 до 7 включительно, текущее значение положить в "x"
print "     h e l l o    ".strip
удалит пробелы в начале и в конце строки, в нутри оставит
(-2..2).each{|x| p x}

если нужен ключ то:

arr=[:left, :right, :up, :down]
arr.each_with_index do |a,b|
print "индекс #{b} значение  #{a}\n"
end

перебор от минус 2 до 2х, а если использовать  ... то не включая 2ку
arr = [1, 2]
arr.push(3) #=> [1, 2, 3]
arr << 4    #=> [1, 2, 3, 4]

забыл что за знак меньше меньше, а оказываться добавить элемент в массив

a,b=b,a

обменять переменные местами не используя третью буферную