(0..20).step(5){|n| print ' first ', n }.each{|n| print ' second ',n }
Вы можете подумать, что этот шаг (5) создает новый Range, например, почему-то заданный вопрос. Но каждый вызывается на (0..20) и должен быть заменен другим шагом (5), если вы хотите "повторно использовать" диапазон 0-5-10-15-20.
Возможно, вам будет хорошо с чем-то вроде (0..3).map{|i| i*5}?
Но "сохраняющиеся" результаты метода шагов с помощью .to_a также должны работать нормально.