Ruby
Теория: Итераторы
times() — простой метод, но слишком ограниченный. Что, например, делать, если нужно обходить какой-то конкретный диапазон чисел в прямом и обратном порядке? Для этого в Ruby есть методы upto() и downto():
Этот метод «поднимается» от цифры, на которой был вызван, до переданного числа. Исходное число и конечное включаются в обход. Вот как, например, посчитать сумму этих чисел:
Так как блок по своей сути — функция, то на него распространяются правила области видимости функций. Все, что определено внутри блока, недоступно снаружи, но блок может «замкнуть» внутри себя внешние переменные, как в примере выше. Переменные замыкаются по ссылке — это значит, что изменение переменной внутри меняет её и снаружи.
Обратите внимание на вызов метода upto() и передачу блока. Блок передается внутрь метода, но происходит это вне вызывающих скобок. Пример выше можно переписать так:
Для тех, кто не привык к Ruby, такой синтаксис может показаться странным, но это быстро проходит. В какой-то момент вы почувствуете, что вас начнет раздражать ставить скобки в других языках)

