💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 2 из 20
Для темы «Примеси `trait`» на какой границе это решение перестаёт быть достаточным?
Scala Примеси `trait`: изменившийся контекст Копировать
// Дополнительный контекст: Публичную сигнатуру слегка изменили, но большая часть вызывающего кода осталась прежней.
trait Named:
def name: String
def greeting = s"Hello, $name"
class User(val name: String) extends Named
println(User("Ada").greeting)
Одного обычного запуска недостаточно, поскольку пограничное значение будет автоматически отклонено до выполнения, даже если код явно делает сужающее преобразование или приведение.
Одного обычного запуска недостаточно, поскольку единственное последствие ошибки здесь — менее понятное сообщение компилятора; поведение собранной программы не меняется.
Одного обычного запуска недостаточно, поскольку мысленно читать `super` как прямой вызов родителя неверно: он следует линеаризованной цепочке, а не текстовой иерархии.
Одного обычного запуска недостаточно, поскольку самотип часто принимают за наследование или автоматическое создание зависимости, из-за чего жизненный цикл ресурса остаётся неуправляемым.
Одного обычного запуска недостаточно, поскольку trait с неявным изменяемым состоянием создаёт трудно видимые зависимости между примесями и усложняет порядок инициализации.
Вопрос 19 из 20
В контракте темы «Самотипы» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
В проектном решении сохранить утверждение «trait задаёт контракт и может содержать реализацию; класс получает его члены через `extends` и `with`» и риск «случайное совпадение имён может изменить поведение при добавлении новой примеси и сделать выбор реализации неочевидным».
В проектном решении сохранить утверждение «mixin-композиция собирает поведение из нескольких traits; конфликт одинаковых конкретных методов требует явного переопределения» и риск «самотип часто принимают за наследование или автоматическое создание зависимости, из-за чего жизненный цикл ресурса остаётся неуправляемым».
В проектном решении сохранить утверждение «самотип `this: Dependency =>` требует, чтобы trait был смешан с указанным типом, но не создаёт поле и не выполняет внедрение зависимости» и риск «trait с неявным изменяемым состоянием создаёт трудно видимые зависимости между примесями и усложняет порядок инициализации».
В проектном решении сохранить утверждение «самотип `this: Dependency =>` требует, чтобы trait был смешан с указанным типом, но не создаёт поле и не выполняет внедрение зависимости» и риск «достаточно проверить путь без ошибки, поскольку остальные ветви следуют той же семантике».
В проектном решении сохранить утверждение «самотип `this: Dependency =>` требует, чтобы trait был смешан с указанным типом, но не создаёт поле и не выполняет внедрение зависимости» и риск «самотип часто принимают за наследование или автоматическое создание зависимости, из-за чего жизненный цикл ресурса остаётся неуправляемым».