RB Ruby  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Блоки, Proc и lambda

Тест «Блоки, Proc и lambda» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 20 вопросов, 10 заданий с Ruby-кодом и 4 тематических шкал.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 55 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 4 тематических результатов и разбор всех ответов.
Вопрос 1 из 20
Как изменится состояние программы после выполнения кода по теме «Передача блока»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Передача блока
# Проследите выполнение и выберите точный результат.
def twice(value, &block)
  block.call(block.call(value))
end
p twice(3) { |n| n + 2 }
Вопрос 2 из 20
Как изменится состояние программы после выполнения кода по теме «Вызов блока через yield»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Вызов блока через yield
# Проследите выполнение и выберите точный результат.
def transform(value)
  return value unless block_given?
  yield(value) * 3
end
p transform(4) { |n| n }
p transform(4)
Вопрос 3 из 20
Проследите выполнение фрагмента. Какой результат верен для темы «Различия Proc/lambda»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Различия Proc/lambda
# Проследите выполнение и выберите точный результат.
strict = ->(x) { x * 2 }
loose = proc { |x| x.to_i * 2 }
p loose.call(3, 9)
begin
  strict.call(3, 9)
rescue => e
  p e.class
end
Вопрос 4 из 20
Проследите выполнение фрагмента. Какой результат верен для темы «Замыкания»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Замыкания
# Проследите выполнение и выберите точный результат.
def counter
  count = 0
  -> { count += 1 }
end
next_value = counter
p [next_value.call, next_value.call]
Вопрос 5 из 20
Обычный сценарий проходит. Какой риск остаётся в теме «Передача блока»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Передача блока
# Обычный запуск проходит. Найдите скрытый риск.
def twice(value, &block)
  block.call(block.call(value))
end
p twice(3) { |n| n + 2 }
Вопрос 6 из 20
Какое допущение делает этот код по теме «Вызов блока через yield» ненадёжным? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Вызов блока через yield
# Обычный запуск проходит. Найдите скрытый риск.
def transform(value)
  return value unless block_given?
  yield(value) * 3
end
p transform(4) { |n| n }
p transform(4)
Вопрос 7 из 20
Обычный сценарий проходит. Какой риск остаётся в теме «Различия Proc/lambda»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Различия Proc/lambda
# Обычный запуск проходит. Найдите скрытый риск.
strict = ->(x) { x * 2 }
loose = proc { |x| x.to_i * 2 }
p loose.call(3, 9)
begin
  strict.call(3, 9)
rescue => e
  p e.class
end
Вопрос 8 из 20
Какое скрытое условие делает фрагмент «Замыкания» хрупким? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Замыкания
# Обычный запуск проходит. Найдите скрытый риск.
def counter
  count = 0
  -> { count += 1 }
end
next_value = counter
p [next_value.call, next_value.call]
Вопрос 9 из 20
На какой контракт языка или библиотеки опирается результат блока «Передача блока»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 10 из 20
На какой контракт языка или библиотеки опирается результат блока «Вызов блока через yield»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 11 из 20
Какой механизм отделяет верный разбор от похожего, но ошибочного объяснения «Различия Proc/lambda»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 12 из 20
Какой принцип темы «Замыкания» переносится на другие примеры того же типа? Нужен вариант без логического разрыва между первой и второй частью.
Вопрос 13 из 20
Какой рефакторинг делает контракт блока «Передача блока» явным и проверяемым? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Передача блока
# Выберите изменение, которое исправляет причину.
def twice(value, &block)
  block.call(block.call(value))
end
p twice(3) { |n| n + 2 }
Вопрос 14 из 20
Что следует изменить в решении «Вызов блока через yield», чтобы закрыть исходный риск? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Вызов блока через yield
# Выберите изменение, которое исправляет причину.
def transform(value)
  return value unless block_given?
  yield(value) * 3
end
p transform(4) { |n| n }
p transform(4)
Вопрос 15 из 20
Какое действие добавляет недостающую гарантию в блоке «Различия Proc/lambda»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 16 из 20
Какое изменение устраняет причину проблемы в теме «Замыкания», а не маскирует симптом? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 17 из 20
Какой контрпример проверит реальную границу механизма «Передача блока»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 18 из 20
Что нужно воспроизвести отдельно перед выпуском изменения «Вызов блока через yield»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 19 из 20
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Различия Proc/lambda»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 20 из 20
Какой сценарий должен падать на старой реализации и проходить после исправления «Замыкания»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу