Это зациклится 2000 раз, выводя стандартное сообщение каждые 100 циклов:
1.upto(2000).with_index do |j,i|
print "line #{i}\r" if (i % 100 == 0)
end
print "\ndone\n"
Альтернативы для индикатора прогресса такого типа:
print '.' if (i % 100 == 0)
или простой счетчик:
spinner = %w[ | / - \\ ]
1.upto(n).with_index do |j,i|
print spinner.rotate![0], "\r" if (i % 100 == 0)
# some long running task
end
print "\ndone\n"
ПРИМЕЧАНИЕ - Если ваш .id
исходит из объекта ActiveRecord, созданного чтением строки в базе данных, то вы можете получить сильно изменяющиеся выходные данные при цикле, если вашсортировка не основана на столбце id
.Кроме того, если ваша база данных существует некоторое время и вы удаляете строки, у вас могут быть пропуски id
чисел.Конечный результат - ваши «каждые 100» могут быть очень неточными.
Я бы порекомендовал не сравнивать с id
и вместо этого использовать отдельную переменную, которую вы увеличиваете при зацикливании, или использовать each_with_index
или Enumerable * with_index
, чтобы предоставить вам последовательно увеличивающееся число, которое вы можете использовать дляваш % 100 == 0
тест.