Что такое блок?
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 15 из 56.
Вы уже писали блоки. Каждый раз, когда вы писали each do |x| ... end, часть между do и end была блоком: фрагментом кода, передаваемым в метод.
[1, 2, 3].each do |n|
puts n * 2
endЗдесь each — это метод массива, а do |n| ... end — это блок. each выполняет блок один раз для каждого элемента, передавая его как n.
Блоки не являются отдельными объектами, которые вы храните в переменных, они напрямую привязаны к вызову метода. Метод либо получает блок, либо нет, и большинство методов итерации (each, map, select, times) спроектированы так, чтобы принимать его.
3.times do |i|
puts "hi #{i}"
endВызов метода без блока меняет то, что он делает. [1,2,3].map без блока возвращает перечислитель вместо преобразованного массива, поэтому блок является частью того, что означает метод.
Задание
НовичокСчитайте целое число n из входных данных. Используйте метод times с блоком, чтобы вывести сообщение Iteration <i> для каждого значения i от 0 до n - 1.
Для входного значения 3 вывод будет следующим:
Iteration 0
Iteration 1
Iteration 2Шпаргалка
Блок — это фрагмент кода, передаваемый методу между do |param| ... end:
[1, 2, 3].each do |n|
puts n * 2
endИспользуйте times, чтобы повторить блок n раз, при этом i меняется от 0 до n - 1:
3.times do |i|
puts "hi #{i}"
endПопробуйте сами
n = gets.to_i
# TODO: используйте n.times с блоком для вывода каждой итерации
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Обзор методов строкИнтерполяция строкИтерация по строкамSplit и JoinИтоги — String Weaver4Блоки, Proc и лямбды
Что такое блок?do..end против фигурных скобокКлючевое слово yieldПараметры блокаProc и лямбдыИтоги: пользовательский итератор7Хеши. Часть 2
Hash.new со значениями по умолчаниюИтерация по хешамВложенные хешиСлияние и преобразованиеИтоги — счетчик частоты10Проект — Учёт студентов
Обзор проектаДобавить студента2Диапазоны
Что такое диапазон?Методы диапазоновДиапазоны в Case / WhenПовторение — практика по диапазонам5Мощь Enumerable
Select и RejectЦепочки MapReduce / Injectcount, all?, any?, none?group_by и partitionsort_by, min_by, max_byИтоги — Data Pipeline8Продвинутые условные конструкции
Case с классами и RegexМножественные значения в whenТернарный операторОднострочные if / unlessПовторение: Классификатор оценок