RB Ruby  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Метапрограммирование и динамические методы

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 70 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 5 тематических результатов и разбор всех ответов.
Вопрос 1 из 25
Как изменится состояние программы после выполнения кода по теме «Динамическое определение методов»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Динамическое определение методов
# Проследите выполнение и выберите точный результат.
class Scale
  { double: 2, triple: 3 }.each do |name, factor|
    define_method(name) { |n| n * factor }
  end
end
s = Scale.new
p [s.double(3), s.triple(5)]
Вопрос 2 из 25
Какая трассировка кода по теме «Динамический вызов send» не теряет важную деталь? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
RubyRuby — Динамический вызов send
# Проследите выполнение и выберите точный результат.
class Box
  def visible = :ok
  private
  def secret = :token
end
box = Box.new
p box.public_send(:visible)
begin
  box.public_send(:secret)
rescue => e
  p e.class
end
Вопрос 3 из 25
Не запуская пример, выберите точный итог для блока «Хуки классов». Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Хуки классов
# Проследите выполнение и выберите точный результат.
class Base
  @children = []
  class << self
    attr_reader :children
    def inherited(child)
      @children << child
      super
    end
  end
end
class Child < Base; end
p Base.children
Вопрос 4 из 25
Какое описание результата точно соответствует показанному коду «Границы динамики»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Границы динамики
# Проследите выполнение и выберите точный результат.
FIELDS = %i[name age].freeze
klass = Class.new do
  FIELDS.each { |field| attr_accessor field }
end
obj = klass.new
obj.name = 'Ada'
p [obj.name, obj.respond_to?(:email)]
Вопрос 5 из 25
Что покажет выполнение этого фрагмента из раздела «Диагностика результата»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Диагностика результата
# Проследите выполнение и выберите точный результат.
module Runner
  def run(value) = value * 2
end
class Job
  include Runner
end
method = Job.new.method(:run)
p [method.owner, method.arity, method.source_location&.first]
Вопрос 6 из 25
Почему успешный пример ещё не доказывает надёжность решения «Динамическое определение методов»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — Динамическое определение методов
# Обычный запуск проходит. Найдите скрытый риск.
class Scale
  { double: 2, triple: 3 }.each do |name, factor|
    define_method(name) { |n| n * factor }
  end
end
s = Scale.new
p [s.double(3), s.triple(5)]
Вопрос 7 из 25
Какое допущение делает этот код по теме «Динамический вызов send» ненадёжным? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Динамический вызов send
# Обычный запуск проходит. Найдите скрытый риск.
class Box
  def visible = :ok
  private
  def secret = :token
end
box = Box.new
p box.public_send(:visible)
begin
  box.public_send(:secret)
rescue => e
  p e.class
end
Вопрос 8 из 25
Что в реализации по теме «Хуки классов» требует исправления прежде всего? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Хуки классов
# Обычный запуск проходит. Найдите скрытый риск.
class Base
  @children = []
  class << self
    attr_reader :children
    def inherited(child)
      @children << child
      super
    end
  end
end
class Child < Base; end
p Base.children
Вопрос 9 из 25
Что в реализации по теме «Границы динамики» требует исправления прежде всего? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Границы динамики
# Обычный запуск проходит. Найдите скрытый риск.
FIELDS = %i[name age].freeze
klass = Class.new do
  FIELDS.each { |field| attr_accessor field }
end
obj = klass.new
obj.name = 'Ada'
p [obj.name, obj.respond_to?(:email)]
Вопрос 10 из 25
Где в показанном решении «Диагностика результата» скрыт дефект, который проявится не на каждом входе? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Диагностика результата
# Обычный запуск проходит. Найдите скрытый риск.
module Runner
  def run(value) = value * 2
end
class Job
  include Runner
end
method = Job.new.method(:run)
p [method.owner, method.arity, method.source_location&.first]
Вопрос 11 из 25
Какой механизм объясняет и обычный, и граничный сценарий «Динамическое определение методов»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 12 из 25
Какое правило Ruby или Rails объясняет поведение в теме «Динамический вызов send»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 13 из 25
Какой механизм объясняет и обычный, и граничный сценарий «Хуки классов»? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 14 из 25
Какой контракт нужно помнить при ревью кода по теме «Границы динамики»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 15 из 25
Какое общее правило связывает результат и риск в разделе «Диагностика результата»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 16 из 25
Какой рефакторинг переводит правило «Динамическое определение методов» из договорённости в проверяемый контракт? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Динамическое определение методов
# Выберите изменение, которое исправляет причину.
class Scale
  { double: 2, triple: 3 }.each do |name, factor|
    define_method(name) { |n| n * factor }
  end
end
s = Scale.new
p [s.double(3), s.triple(5)]
Вопрос 17 из 25
Какое исправление уменьшает риск, не скрывая исходное поведение «Динамический вызов send»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Динамический вызов send
# Выберите изменение, которое исправляет причину.
class Box
  def visible = :ok
  private
  def secret = :token
end
box = Box.new
p box.public_send(:visible)
begin
  box.public_send(:secret)
rescue => e
  p e.class
end
Вопрос 18 из 25
Какой подход сохраняет намерение кода и устраняет дефект в теме «Хуки классов»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Хуки классов
# Выберите изменение, которое исправляет причину.
class Base
  @children = []
  class << self
    attr_reader :children
    def inherited(child)
      @children << child
      super
    end
  end
end
class Child < Base; end
p Base.children
Вопрос 19 из 25
Что следует изменить в решении «Границы динамики», чтобы закрыть исходный риск? Выберите связку, в которой верны и основной вывод, и его обоснование.
RubyRuby — Границы динамики
# Выберите изменение, которое исправляет причину.
FIELDS = %i[name age].freeze
klass = Class.new do
  FIELDS.each { |field| attr_accessor field }
end
obj = klass.new
obj.name = 'Ada'
p [obj.name, obj.respond_to?(:email)]
Вопрос 20 из 25
Какое изменение устраняет причину проблемы в теме «Диагностика результата», а не маскирует симптом? Правильным считается только полностью согласованное утверждение.
Вопрос 21 из 25
Что следует добавить в набор проверок по теме «Динамическое определение методов», чтобы поймать редкий отказ? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Вопрос 22 из 25
Чем дополнить базовый тест, чтобы проверить ограничение темы «Динамический вызов send»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 23 из 25
Какую границу контракта «Хуки классов» нужно закрепить отдельным тестом? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 24 из 25
Какой сценарий проверит не только результат, но и побочный эффект решения «Границы динамики»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 25 из 25
Что следует добавить в набор проверок по теме «Диагностика результата», чтобы поймать редкий отказ? Правильным считается только полностью согласованное утверждение.

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

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

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

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