💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов, на работу отведено 70 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 5 тематических шкал и подробные объяснения.
Вопрос 1 из 25
Как поведёт себя программа в этом коротком сценарии, связанном с «Преобразования построителя»? Важно учесть: этап преобразования выражений построителем.
Swift Преобразования построителя · фрагмент для разбора Копировать
@resultBuilder enum ListBuilder20 {
static func buildBlock(_ parts: [Int]...) -> [Int] { parts.flatMap { $0 } }
static func buildExpression(_ value: Int) -> [Int] { [value] }
}
@ListBuilder20 func numbers20() -> [Int] { 1; 2; 3 }
print(numbers20())
Фрагмент не требует отдельного условия: снимок итогового значения полностью заменяет тест отдельных преобразований.
buildExpression превращает каждое Int в массив, buildBlock объединяет части; результат [1, 3, 3].
buildExpression превращает каждое Int в массив, buildBlock объединяет части; результат [1, 2, 3].
buildExpression превращает каждое Int в массив, buildBlock объединяет части; результат [2, 2, 3].
buildExpression превращает каждое Int в массив, buildBlock объединяет части; результат [1, 2, 4].
Вопрос 4 из 25
В этом примере важна одна точная деталь механизма «Диагностика ошибок». Что действительно произойдёт? Здесь оценивается методика разбора ошибок построителя результата.
Swift Диагностика ошибок · фрагмент для разбора Копировать
@resultBuilder
enum IntBuilder20 {
static func buildBlock(_ values: Int...) -> [Int] { values }
static func buildExpression(_ value: Int) -> Int { value }
static func buildExpression(_ value: String) -> Int { Int(value) ?? 0 }
}
@IntBuilder20
func values20() -> [Int] {
1
"2"
}
print(values20())
Перегрузки buildExpression принимают и Int, и String; строка «3» преобразуется в число, поэтому функция возвращает [1, 2].
Для этого примера достаточно учесть, что ошибка внутри блока всегда указывает на строку `buildBlock`, а не на исходное выражение.
Перегрузки buildExpression принимают и Int, и String; строка «2» преобразуется в число, поэтому функция возвращает [2, 2].
Перегрузки buildExpression принимают и Int, и String; строка «2» преобразуется в число, поэтому функция возвращает [1, 2].
Перегрузки buildExpression принимают и Int, и String; строка «2» преобразуется в число, поэтому функция возвращает [1, 3].