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

Наследование и поиск метода

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 55 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 4 тематических результатов и разбор всех ответов.
Вопрос 1 из 20
Как следует прочитать результат показанного примера «Цепочка предков»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Цепочка предков
# Проследите выполнение и выберите точный результат.
module Taggable
  def tag = :tag
end
class Base; end
class Document < Base
  include Taggable
end
p Document.ancestors
p Document.new.method(:tag).owner
Вопрос 2 из 20
Как изменится состояние программы после выполнения кода по теме «Вызов родительской реализации через super»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Вызов родительской реализации через super
# Проследите выполнение и выберите точный результат.
class Parent
  def greet(name) = "Hi, #{name}"
end
class Child < Parent
  def greet(name)
    super + '!'
  end
end
p Child.new.greet('Ada')
Вопрос 3 из 20
Проследите выполнение фрагмента. Какой результат верен для темы «Переопределение»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Переопределение
# Проследите выполнение и выберите точный результат.
class Base
  def size(limit: nil) = 1
end
class Special < Base
  def size(limit: nil) = 2
end
p [Base.new.size, Special.new.size]
Вопрос 4 из 20
Как следует прочитать результат показанного примера «Динамический перехват method_missing»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Динамический перехват method_missing
# Проследите выполнение и выберите точный результат.
class Finder
  def method_missing(name, *)
    return [:find, name.to_s.delete_prefix('find_by_')] if name.start_with?('find_by_')
    super
  end
  def respond_to_missing?(name, *)
    name.start_with?('find_by_') || super
  end
end
p Finder.new.find_by_name
p Finder.new.respond_to?(:find_by_name)
Вопрос 5 из 20
Какое скрытое условие делает фрагмент «Цепочка предков» хрупким? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Цепочка предков
# Обычный запуск проходит. Найдите скрытый риск.
module Taggable
  def tag = :tag
end
class Base; end
class Document < Base
  include Taggable
end
p Document.ancestors
p Document.new.method(:tag).owner
Вопрос 6 из 20
Что может сломаться при переносе этого решения «Вызов родительской реализации через super» в рабочую систему? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Вызов родительской реализации через super
# Обычный запуск проходит. Найдите скрытый риск.
class Parent
  def greet(name) = "Hi, #{name}"
end
class Child < Parent
  def greet(name)
    super + '!'
  end
end
p Child.new.greet('Ada')
Вопрос 7 из 20
Какой рабочий сбой вероятнее всего связан именно с механизмом «Переопределение»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
RubyRuby — Переопределение
# Обычный запуск проходит. Найдите скрытый риск.
class Base
  def size(limit: nil) = 1
end
class Special < Base
  def size(limit: nil) = 2
end
p [Base.new.size, Special.new.size]
Вопрос 8 из 20
Базовый пример выглядит корректно. Что всё же нарушает контракт в блоке «Динамический перехват method_missing»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Динамический перехват method_missing
# Обычный запуск проходит. Найдите скрытый риск.
class Finder
  def method_missing(name, *)
    return [:find, name.to_s.delete_prefix('find_by_')] if name.start_with?('find_by_')
    super
  end
  def respond_to_missing?(name, *)
    name.start_with?('find_by_') || super
  end
end
p Finder.new.find_by_name
p Finder.new.respond_to?(:find_by_name)
Вопрос 9 из 20
Какое правило Ruby или Rails объясняет поведение в теме «Цепочка предков»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 10 из 20
Какое правило остаётся верным, даже если вход и порядок вызовов изменятся, в теме «Вызов родительской реализации через super»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 11 из 20
Какое общее правило связывает результат и риск в разделе «Переопределение»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 12 из 20
Как сформулировать правило блока «Динамический перехват method_missing» без лишних обещаний? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 13 из 20
Какое изменение устраняет причину проблемы в теме «Цепочка предков», а не маскирует симптом? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Цепочка предков
# Выберите изменение, которое исправляет причину.
module Taggable
  def tag = :tag
end
class Base; end
class Document < Base
  include Taggable
end
p Document.ancestors
p Document.new.method(:tag).owner
Вопрос 14 из 20
Какое исправление уменьшает риск, не скрывая исходное поведение «Вызов родительской реализации через super»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Вызов родительской реализации через super
# Выберите изменение, которое исправляет причину.
class Parent
  def greet(name) = "Hi, #{name}"
end
class Child < Parent
  def greet(name)
    super + '!'
  end
end
p Child.new.greet('Ada')
Вопрос 15 из 20
Какое исправление уменьшает риск, не скрывая исходное поведение «Переопределение»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 16 из 20
Какое инженерное решение лучше всего соответствует механизму «Динамический перехват method_missing»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 17 из 20
Какой контрпример проверит реальную границу механизма «Цепочка предков»? Правильным считается только полностью согласованное утверждение.
Вопрос 18 из 20
Что следует добавить в набор проверок по теме «Вызов родительской реализации через super», чтобы поймать редкий отказ? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 19 из 20
Какую границу контракта «Переопределение» нужно закрепить отдельным тестом? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 20 из 20
Какой случай покажет, что исправление «Динамический перехват method_missing» не держится на удачном входе? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.

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

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

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

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