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

Given, using и extension в Scala 3

В тесте «Given, using и extension в Scala 3» недостаточно узнать термин: потребуется проследить типы и выполнение, найти риск соседнего случая и выбрать проверяемую правку. Шкалы: Контекстные параметры, Экземпляры `given`, Методы расширения, Область поиска, Пограничные случаи.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. Фрагменты относятся к Scala 3; внешняя библиотека названа прямо в коде или условии.
Вопрос 1 из 25
Во фрагменте проверяется тема «Контекстные параметры». Какое правило точнее всего объясняет поведение кода?
ScalaКонтекстные параметры: чтение фрагмента
trait Trace:
  def log(s: String): Unit
given Trace with
  def log(s: String) = println(s)
def run(using t: Trace) = t.log("start")
run
Вопрос 2 из 25
Для темы «Контекстные параметры» что остаётся обязанностью вызывающего кода или окружения?
ScalaКонтекстные параметры: изменившийся контекст
// Дополнительный контекст: Библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений.
trait Trace:
  def log(s: String): Unit
given Trace with
  def log(s: String) = println(s)
def run(using t: Trace) = t.log("start")
run
Вопрос 3 из 25
При исправлении темы «Контекстные параметры» что следует изменить, чтобы следующий рефакторинг не вернул тот же риск?
ScalaКонтекстные параметры: решение на ревью
trait Trace:
  def log(s: String): Unit
given Trace with
  def log(s: String) = println(s)
def run(using t: Trace) = t.log("start")
run
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 4 из 25
В контракте темы «Контекстные параметры» что следует оставить в проектном решении после этого изменения контекста?
\operatorname{lookup}(T)=\text{nearest visible given}
Вопрос 5 из 25
При проверке темы «Контекстные параметры» какой итог можно проверить автоматически или воспроизводимым примером?
Вопрос 6 из 25
В теме «Экземпляры `given`» что в этом примере определяется семантикой Scala, а не соглашением автора?
ScalaЭкземпляры `given`: чтение фрагмента
trait Ord[A]: def compare(a: A, b: A): Int
given Ord[Int] with
  def compare(a: Int, b: Int) = a.compare(b)
println(summon[Ord[Int]].compare(2, 1))
Вопрос 7 из 25
Для темы «Экземпляры `given`» после переноса кода в общий модуль проявилось скрытое допущение. Какое?
ScalaЭкземпляры `given`: изменившийся контекст
// Дополнительный контекст: Обобщённую сигнатуру опубликовали в API, после чего появился ещё один допустимый экземпляр типа.
trait Ord[A]: def compare(a: A, b: A): Int
given Ord[Int] with
  def compare(a: Int, b: Int) = a.compare(b)
println(summon[Ord[Int]].compare(2, 1))
Вопрос 8 из 25
Какое изменение по теме «Экземпляры `given`» не переносит риск в другой слой?
ScalaЭкземпляры `given`: решение на ревью
trait Ord[A]: def compare(a: A, b: A): Int
given Ord[Int] with
  def compare(a: Int, b: Int) = a.compare(b)
println(summon[Ord[Int]].compare(2, 1))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 9 из 25
В контракте темы «Экземпляры `given`» типовую конструкцию перенесли в другой модуль, где набор импортов и область поиска `given` отличаются. Какой вывод одновременно сохраняет правило и учитывает его границу?
Вопрос 10 из 25
При проверке темы «Экземпляры `given`» как сформулировать защиту от регрессии без расплывчатого «работает как раньше»?
Вопрос 11 из 25
Какой вывод о теме «Методы расширения» можно сделать без дополнительных допущений?
ScalaМетоды расширения: чтение фрагмента
extension (s: String)
  def nonEmptyOption = Option.when(s.nonEmpty)(s)
println("".nonEmptyOption -> "x".nonEmptyOption)
Вопрос 12 из 25
Для темы «Методы расширения» какое последствие нельзя исключить одним успешным запуском?
ScalaМетоды расширения: изменившийся контекст
// Дополнительный контекст: Типовую конструкцию перенесли в другой модуль, где набор импортов и область поиска `given` отличаются.
extension (s: String)
  def nonEmptyOption = Option.when(s.nonEmpty)(s)
println("".nonEmptyOption -> "x".nonEmptyOption)
Вопрос 13 из 25
При исправлении темы «Методы расширения» какая правка сохраняет полезную семантику и не расширяет обещания API?
ScalaМетоды расширения: решение на ревью
extension (s: String)
  def nonEmptyOption = Option.when(s.nonEmpty)(s)
println("".nonEmptyOption -> "x".nonEmptyOption)
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 14 из 25
В контракте темы «Методы расширения» локальный пример стал частью более крупной системы. Какая трактовка контракта остаётся полной?
Вопрос 15 из 25
При проверке темы «Методы расширения» какой пункт следует добавить в критерии приёмки изменения?
Вопрос 16 из 25
В теме «Область поиска» код компилируется и запускается. Какое утверждение о его контракте остаётся верным?
ScalaОбласть поиска: чтение фрагмента
trait Label[A]: def apply(a: A): String
given Label[Int] = _.toString
def show[A](a: A)(using l: Label[A]) = l(a)
println(show(7))
Вопрос 17 из 25
Для темы «Область поиска» какой пограничный случай относится к контракту, а не только к стилю записи?
ScalaОбласть поиска: изменившийся контекст
// Дополнительный контекст: Библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений.
trait Label[A]: def apply(a: A): String
given Label[Int] = _.toString
def show[A](a: A)(using l: Label[A]) = l(a)
println(show(7))
Вопрос 18 из 25
При исправлении темы «Область поиска» что здесь лучше исправить до объединения изменений?
ScalaОбласть поиска: решение на ревью
trait Label[A]: def apply(a: A): String
given Label[Int] = _.toString
def show[A](a: A)(using l: Label[A]) = l(a)
println(show(7))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 19 из 25
В контракте темы «Область поиска» условия эксплуатации изменились, но синтаксис остался прежним. Что теперь важно удержать вместе?
Вопрос 20 из 25
При проверке темы «Область поиска» что поможет соседнему модулю не повторить ту же ошибку?
Вопрос 21 из 25
В теме «Пограничные случаи» на ревью спорят о причине наблюдаемого результата. Какое объяснение корректно?
ScalaПограничные случаи: чтение фрагмента
trait Size[A]: def size(a: A): Int
given [A](using s: Size[A]): Size[List[A]] with
  def size(xs: List[A]) = xs.map(s.size).sum
given Size[Int] = _ => 1
println(summon[Size[List[Int]]].size(List(1,2)))
Вопрос 22 из 25
Для темы «Пограничные случаи» библиотечный тип расширили, и в месте вызова изменился выбор доступных операций и контекстных значений. Какой дефект остаётся возможным при корректном синтаксисе?
Вопрос 23 из 25
При исправлении темы «Пограничные случаи» на ревью уже воспроизвели проблему: Слишком общая рекурсивная фабрика given может вызвать дивергенцию поиска или непонятное сообщение о недостающем экземпляре. Какую правку стоит принять?
ScalaПограничные случаи: решение на ревью
trait Size[A]: def size(a: A): Int
given [A](using s: Size[A]): Size[List[A]] with
  def size(xs: List[A]) = xs.map(s.size).sum
given Size[Int] = _ => 1
println(summon[Size[List[Int]]].size(List(1,2)))
// На ревью требуется устранить причину дефекта, не скрывая её приведением типа или значением по умолчанию.
Вопрос 24 из 25
В контракте темы «Пограничные случаи» какое решение не превращает частный успешный случай в общее обещание?
Вопрос 25 из 25
При проверке темы «Пограничные случаи» какой контроль остаётся полезным после рефакторинга и переименования кода?

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

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

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

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