💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 6 тематических результатов и разбор всех ответов.
Вопрос 1 из 30
Какое описание результата точно соответствует показанному коду «Class и Module»? Правильным считается только полностью согласованное утверждение.
Ruby Ruby — Class и Module Копировать
# Проследите выполнение и выберите точный результат.
p Class < Module
p String.class
p Enumerable.class
mod = Module.new { def marker = :ok }
klass = Class.new { include mod }
p klass.new.marker
Проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование. Это объясняется тем, что рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование. Это объясняется тем, что `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы. Это объясняется тем, что `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Это объясняется тем, что `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование. Это объясняется тем, что ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Вопрос 2 из 30
Что произойдёт после последней строки в примере по теме «Синглтон-класс объекта»? Верный вариант не содержит частично правильной подмены причины или следствия.
Ruby Ruby — Синглтон-класс объекта Копировать
# Проследите выполнение и выберите точный результат.
item = Object.new
def item.label = 'special'
other = Object.new
p item.singleton_class
p [item.label, other.respond_to?(:label)]
Метод `label` отвечает только у `item`, а другой объект того же класса его не получает. Причина такого результата: singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Метод `label` отвечает только у `item`, а другой объект того же класса его не получает. Причина такого результата: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Метод `label` отвечает только у `item`, а другой объект того же класса его не получает. Причина такого результата: binding сохраняет контекст переменных и self; `eval` в binding исполняет Ruby-код с полномочиями этого контекста.
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Причина такого результата: singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время. Причина такого результата: singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Вопрос 4 из 30
Какое описание результата точно соответствует показанному коду «Исследование объектов через ObjectSpace»? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Ruby Ruby — Исследование объектов через ObjectSpace Копировать
# Проследите выполнение и выберите точный результат.
require 'objspace'
GC.start
count = ObjectSpace.each_object(String).count
p count
p ObjectSpace.memsize_of('ruby')
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Механизм результата таков: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Метод `label` отвечает только у `item`, а другой объект того же класса его не получает. Механизм результата таков: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время. Механизм результата таков: `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время. Механизм результата таков: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время. Механизм результата таков: рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Вопрос 5 из 30
Проследите выполнение фрагмента. Какой результат верен для темы «Совместимость и переносимость»? Верный вариант не содержит частично правильной подмены причины или следствия.
Ruby Ruby — Совместимость и переносимость Копировать
# Проследите выполнение и выберите точный результат.
p [RUBY_ENGINE, RUBY_VERSION, RUBY_PLATFORM]
feature = Fiber.respond_to?(:scheduler)
p feature
Подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время. Наблюдение согласуется с тем, что рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Метод `label` отвечает только у `item`, а другой объект того же класса его не получает. Наблюдение согласуется с тем, что рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Наблюдение согласуется с тем, что `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Наблюдение согласуется с тем, что рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Наблюдение согласуется с тем, что рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Вопрос 6 из 30
Проследите выполнение фрагмента. Какой результат верен для темы «Стратегия тестирования»? Правильным считается только полностью согласованное утверждение.
Ruby Ruby — Стратегия тестирования Копировать
# Проследите выполнение и выберите точный результат.
klass = Class.new do
define_method(:call) { |input:, strict: false| [input, strict] }
end
method = klass.instance_method(:call)
p [method.parameters, klass.public_instance_methods(false).include?(:call)]
Код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL. Этот вывод опирается на правило: рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы. Этот вывод опирается на правило: рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование. Этот вывод опирается на правило: рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы. Этот вывод опирается на правило: `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы. Этот вывод опирается на правило: рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Вопрос 8 из 30
Какое допущение делает этот код по теме «Синглтон-класс объекта» ненадёжным? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Ruby Ruby — Синглтон-класс объекта Копировать
# Обычный запуск проходит. Найдите скрытый риск.
item = Object.new
def item.label = 'special'
other = Object.new
p item.singleton_class
p [item.label, other.respond_to?(:label)]
Добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию. Этот риск связан с тем, что ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Обобщение «класс и модуль одно и то же» приводит к попытке заменить наследование include или хранить состояние экземпляра в модуле без явного владельца. Этот риск связан с тем, что singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию. Этот риск связан с тем, что singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности. Этот риск связан с тем, что singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию. Этот риск связан с тем, что binding сохраняет контекст переменных и self; `eval` в binding исполняет Ruby-код с полномочиями этого контекста.
Вопрос 9 из 30
Что в реализации по теме «Контекст выполнения Binding» требует исправления прежде всего? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
Ruby Ruby — Контекст выполнения Binding Копировать
# Обычный запуск проходит. Найдите скрытый риск.
price = 10
context = binding
p context.local_variable_get(:price)
p eval('price * 2', context)
Исполнение пользовательской строки через eval даёт доступ к файловой системе, константам и private-методам процесса, а не только к перечисленным переменным. Уязвимое место возникает потому, что binding сохраняет контекст переменных и self; `eval` в binding исполняет Ruby-код с полномочиями этого контекста.
Обобщение «класс и модуль одно и то же» приводит к попытке заменить наследование include или хранить состояние экземпляра в модуле без явного владельца. Уязвимое место возникает потому, что binding сохраняет контекст переменных и self; `eval` в binding исполняет Ruby-код с полномочиями этого контекста.
Исполнение пользовательской строки через eval даёт доступ к файловой системе, константам и private-методам процесса, а не только к перечисленным переменным. Уязвимое место возникает потому, что ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Исполнение пользовательской строки через eval даёт доступ к файловой системе, константам и private-методам процесса, а не только к перечисленным переменным. Уязвимое место возникает потому, что singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class.
Добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию. Уязвимое место возникает потому, что binding сохраняет контекст переменных и self; `eval` в binding исполняет Ruby-код с полномочиями этого контекста.
Вопрос 10 из 30
Какое допущение делает этот код по теме «Исследование объектов через ObjectSpace» ненадёжным? Верный вариант не содержит частично правильной подмены причины или следствия.
Ruby Ruby — Исследование объектов через ObjectSpace Копировать
# Обычный запуск проходит. Найдите скрытый риск.
require 'objspace'
GC.start
count = ObjectSpace.each_object(String).count
p count
p ObjectSpace.memsize_of('ruby')
Запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций. К такому сбою приводит правило: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности. К такому сбою приводит правило: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру. К такому сбою приводит правило: ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC.
Запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций. К такому сбою приводит правило: `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций. К такому сбою приводит правило: рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Вопрос 11 из 30
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Совместимость и переносимость»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Ruby Ruby — Совместимость и переносимость Копировать
# Обычный запуск проходит. Найдите скрытый риск.
p [RUBY_ENGINE, RUBY_VERSION, RUBY_PLATFORM]
feature = Fiber.respond_to?(:scheduler)
p feature
Ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности. Источник риска: рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности. Источник риска: рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций. Источник риска: рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию. Источник риска: рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности. Источник риска: `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Вопрос 12 из 30
Обычный сценарий проходит. Какой риск остаётся в теме «Стратегия тестирования»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Ruby Ruby — Стратегия тестирования Копировать
# Обычный запуск проходит. Найдите скрытый риск.
klass = Class.new do
define_method(:call) { |input:, strict: false| [input, strict] }
end
method = klass.instance_method(:call)
p [method.parameters, klass.public_instance_methods(false).include?(:call)]
Запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций. Проблема возникает из-за того, что рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру. Проблема возникает из-за того, что `Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров.
Тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру. Проблема возникает из-за того, что рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру. Проблема возникает из-за того, что рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт.
Ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности. Проблема возникает из-за того, что рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца.
Вопрос 13 из 30
Почему показанный фрагмент «Class и Module» ведёт себя именно так? Верный вариант не содержит частично правильной подмены причины или следствия.
Рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца. Поэтому проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование.
`Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров. Поэтому проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование.
`Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров. Поэтому проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы.
ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC. Поэтому проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование.
`Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров. Поэтому код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
Вопрос 14 из 30
Какое свойство Ruby или Rails определяет результат примера «Синглтон-класс объекта»? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Binding сохраняет контекст переменных и self; `eval` в binding исполняет Ruby-код с полномочиями этого контекста. Из этого следует, что метод `label` отвечает только у `item`, а другой объект того же класса его не получает.
Singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class. Из этого следует, что метод `label` отвечает только у `item`, а другой объект того же класса его не получает.
Singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class. Из этого следует, что код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC. Из этого следует, что метод `label` отвечает только у `item`, а другой объект того же класса его не получает.
Singleton class хранит методы конкретного объекта; методы класса — это singleton-методы объекта, который сам является Class. Из этого следует, что подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время.
Вопрос 16 из 30
Какое общее правило связывает результат и риск в разделе «Исследование объектов через ObjectSpace»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC. Именно поэтому код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
`Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров. Именно поэтому подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время.
ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC. Именно поэтому метод `label` отвечает только у `item`, а другой объект того же класса его не получает.
Рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца. Именно поэтому подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время.
ObjectSpace позволяет исследовать живые объекты и финализаторы, но полный обход дорог и наблюдает состояние в конкретный момент, зависящее от GC. Именно поэтому подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время.
Вопрос 17 из 30
Какой механизм объясняет и обычный, и граничный сценарий «Совместимость и переносимость»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт. Это правило даёт такой результат: метод `label` отвечает только у `item`, а другой объект того же класса его не получает.
Рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт. Это правило даёт такой результат: код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
Рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца. Это правило даёт такой результат: код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
Рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт. Это правило даёт такой результат: подсчёт строк возвращает моментальный объём живых String, а не точное число созданных за всё время.
`Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров. Это правило даёт такой результат: код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
Вопрос 18 из 30
Какое правило Ruby или Rails объясняет поведение в теме «Стратегия тестирования»? Правильным считается только полностью согласованное утверждение.
`Class` является подклассом `Module`: классы могут создавать экземпляры и наследоваться, модули дают пространства имён и композицию без экземпляров. Практическое следствие правила: проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы.
Рефлексивные API и внутреннее устройство могут различаться между CRuby, JRuby и TruffleRuby; опираться следует на документированный публичный контракт. Практическое следствие правила: проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы.
Рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца. Практическое следствие правила: код проверяет движок и версию вместо предположения, что все реализации имеют одинаковый JIT или GVL.
Рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца. Практическое следствие правила: проверка `instance_method(:call).parameters` подтверждает ключевой обязательный аргумент без вызова внешней системы.
Рефлексивный код нужно тестировать по внешнему контракту и отдельно фиксировать форму генерируемого интерфейса: имена, видимость, арность и владельца. Практическое следствие правила: проверка показывает `Class < Module`, но `Module.new` не создаёт обычные экземпляры предметного типа через наследование.
Вопрос 20 из 30
Какое изменение устраняет причину проблемы в теме «Синглтон-класс объекта», а не маскирует симптом? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Ruby Ruby — Синглтон-класс объекта Копировать
# Выберите изменение, которое исправляет причину.
item = Object.new
def item.label = 'special'
other = Object.new
p item.singleton_class
p [item.label, other.respond_to?(:label)]
Если поведение повторяется, выделить класс, модуль или делегат вместо украшения каждого экземпляра отдельно. Это изменение устраняет проблему: обобщение «класс и модуль одно и то же» приводит к попытке заменить наследование include или хранить состояние экземпляра в модуле без явного владельца.
Сочетать контрактные примеры поведения с точечной проверкой метаданных, действительно нужных интеграции. Это изменение устраняет проблему: добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию.
Проверять capability через respond_to?/конфигурацию и держать матрицу CI на реально поддерживаемых движках. Это изменение устраняет проблему: добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию.
Если поведение повторяется, выделить класс, модуль или делегат вместо украшения каждого экземпляра отдельно. Это изменение устраняет проблему: добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию.
Если поведение повторяется, выделить класс, модуль или делегат вместо украшения каждого экземпляра отдельно. Это изменение устраняет проблему: ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности.
Вопрос 21 из 30
Какой вариант правки выдержит граничный сценарий темы «Контекст выполнения Binding»? Правильным считается только полностью согласованное утверждение.
Ruby Ruby — Контекст выполнения Binding Копировать
# Выберите изменение, которое исправляет причину.
price = 10
context = binding
p context.local_variable_get(:price)
p eval('price * 2', context)
Выбирать Class для типа с экземплярами и Module для роли/пространства имён, проверяя получившуюся цепочку ancestors. Такая правка нужна из-за риска: исполнение пользовательской строки через eval даёт доступ к файловой системе, константам и private-методам процесса, а не только к перечисленным переменным.
Для формул из внешнего источника использовать собственный парсер/интерпретатор ограниченной грамматики, а Binding оставить для отладки и контролируемого кода. Такая правка нужна из-за риска: исполнение пользовательской строки через eval даёт доступ к файловой системе, константам и private-методам процесса, а не только к перечисленным переменным.
Для формул из внешнего источника использовать собственный парсер/интерпретатор ограниченной грамматики, а Binding оставить для отладки и контролируемого кода. Такая правка нужна из-за риска: добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию.
Снимать heap dump или выборочную метрику вне горячего пути и сравнивать несколько снимков после одинаковой нагрузки. Такая правка нужна из-за риска: исполнение пользовательской строки через eval даёт доступ к файловой системе, константам и private-методам процесса, а не только к перечисленным переменным.
Для формул из внешнего источника использовать собственный парсер/интерпретатор ограниченной грамматики, а Binding оставить для отладки и контролируемого кода. Такая правка нужна из-за риска: обобщение «класс и модуль одно и то же» приводит к попытке заменить наследование include или хранить состояние экземпляра в модуле без явного владельца.
Вопрос 23 из 30
Какое исправление уменьшает риск, не скрывая исходное поведение «Совместимость и переносимость»? Верный вариант не содержит частично правильной подмены причины или следствия.
Ruby Ruby — Совместимость и переносимость Копировать
# Выберите изменение, которое исправляет причину.
p [RUBY_ENGINE, RUBY_VERSION, RUBY_PLATFORM]
feature = Fiber.respond_to?(:scheduler)
p feature
Проверять capability через respond_to?/конфигурацию и держать матрицу CI на реально поддерживаемых движках. Именно эта мера закрывает риск: ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности.
Проверять capability через respond_to?/конфигурацию и держать матрицу CI на реально поддерживаемых движках. Именно эта мера закрывает риск: запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций.
Сочетать контрактные примеры поведения с точечной проверкой метаданных, действительно нужных интеграции. Именно эта мера закрывает риск: ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности.
Если поведение повторяется, выделить класс, модуль или делегат вместо украшения каждого экземпляра отдельно. Именно эта мера закрывает риск: ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности.
Проверять capability через respond_to?/конфигурацию и держать матрицу CI на реально поддерживаемых движках. Именно эта мера закрывает риск: добавление singleton-методов множеству экземпляров создаёт множество анонимных классов и усложняет кэширование методов/сериализацию.
Вопрос 24 из 30
Какое изменение устраняет причину проблемы в теме «Стратегия тестирования», а не маскирует симптом? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
Ruby Ruby — Стратегия тестирования Копировать
# Выберите изменение, которое исправляет причину.
klass = Class.new do
define_method(:call) { |input:, strict: false| [input, strict] }
end
method = klass.instance_method(:call)
p [method.parameters, klass.public_instance_methods(false).include?(:call)]
Если поведение повторяется, выделить класс, модуль или делегат вместо украшения каждого экземпляра отдельно. После изменения не должен сохраняться риск: тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру.
Сочетать контрактные примеры поведения с точечной проверкой метаданных, действительно нужных интеграции. После изменения не должен сохраняться риск: ветвление по `RUBY_ENGINE` разрастается и скрывает функциональное различие, которое лучше обнаруживать проверкой возможности.
Проверять capability через respond_to?/конфигурацию и держать матрицу CI на реально поддерживаемых движках. После изменения не должен сохраняться риск: тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру.
Сочетать контрактные примеры поведения с точечной проверкой метаданных, действительно нужных интеграции. После изменения не должен сохраняться риск: запуск `ObjectSpace.each_object` в частом рабочем запросе создаёт паузу и сам меняет профиль аллокаций.
Сочетать контрактные примеры поведения с точечной проверкой метаданных, действительно нужных интеграции. После изменения не должен сохраняться риск: тест только списка `instance_methods` проходит, даже если метод стал private или изменил сигнатуру.