💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 2 из 20
Какое последствие следует проверить при использовании «map и flatMap»?
Scala map и flatMap: изменившийся контекст Копировать
// Дополнительный контекст: После рефакторинга код по-прежнему компилируется, однако его статический тип стал шире.
val out = for x <- List(1,2); y <- List(10,20) yield x + y
println(out.mkString(","))
Одного обычного запуска недостаточно, поскольку for-comprehension не является отдельным циклом и наследует семантику методов конкретного контекста.
Одного обычного запуска недостаточно, поскольку фильтр может повторно вычислять шаблон или потерять полезное объяснение, почему значение отброшено.
Одного обычного запуска недостаточно, поскольку если две ветви компилируются по отдельности, их общий тип обязательно сохранит методы обеих ветвей.
Одного обычного запуска недостаточно, поскольку локальное изменение сигнатуры не способно повлиять на поиск перегрузки, given или вывод типа в вызывающем коде.
Одного обычного запуска недостаточно, поскольку добавить метод с правильным именем недостаточно, если его типы не образуют ожидаемую композицию.
Вопрос 4 из 20
В контракте темы «map и flatMap» какая формулировка учитывает и семантику конструкции, и реальный риск?
Опираться на семантику «простой генератор и `yield` обычно десугарятся в `map`; несколько генераторов используют вложенные `flatMap` и завершающий `map`», но отдельно проверять ограничение «фильтр может повторно вычислять шаблон или потерять полезное объяснение, почему значение отброшено».
Опираться на семантику «простой генератор и `yield` обычно десугарятся в `map`; несколько генераторов используют вложенные `flatMap` и завершающий `map`», но отдельно проверять ограничение «for-comprehension не является отдельным циклом и наследует семантику методов конкретного контекста».
Опираться на семантику «простой генератор и `yield` обычно десугарятся в `map`; несколько генераторов используют вложенные `flatMap` и завершающий `map`», но отдельно проверять ограничение «одного успешного запуска достаточно, чтобы подтвердить контракт на всех входах».
Опираться на семантику «все генераторы должны композиционно согласоваться: тип результата `flatMap` предыдущего шага определяет контекст всей цепочки», но отдельно проверять ограничение «добавить метод с правильным именем недостаточно, если его типы не образуют ожидаемую композицию».
Опираться на семантику «десугаринг объясняет требования к пользовательскому типу: ему нужны подходящие `map`, `flatMap` и иногда `withFilter`», но отдельно проверять ограничение «for-comprehension не является отдельным циклом и наследует семантику методов конкретного контекста».