Тебе лучше уточнить свой вопрос, это довольно запутанно.
Я не понимаю 1), поэтому я попытаюсь обратиться к 2), по крайней мере, так, как я понял.
Есть метод Enumerable#each_cons
, я думаю, что он существует начиная с Ruby 1.8.7, который использует более одного элемента в каждой итерации:
(1..10).each_cons(2) do |i,j|
puts "#{i}, #{j}"
end
1, 2
2, 3
3, 4
4, 5
5, 6
6, 7
7, 8
8, 9
9, 10
#=> nil
Таким образом, по сути, вы получите предыдущее (или следующее, в зависимости от того, как вы его видите) значение на каждой итерации.
Чтобы проверить, находитесь ли вы в первой итерации, вы можете использовать #with_index
:
('a'..'f').each.with_index do |val, index|
puts "first value is #{val}" if index == 0
end
#=>first value is a
И вы можете объединить оба вышеперечисленных в одном цикле.