Что выведет код Middle Замыкания и захват обновлено
Что выведет Swift: ленивость @autoclosure
Вопрос
Что выведет код?
func log(_ enabled: Bool, _ message: @autoclosure () -> String) {
if enabled { print(message()) }
}
func expensive() -> String {
print("считаю")
return "готово"
}
log(false, expensive())
log(true, expensive())
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: считаю, готово. При enabled == false замыкание не вызывается, и expensive() не выполняется вовсе.
Что выведет
считаю
готово
Разбор
При enabled == false замыкание не вызывается, и expensive() не выполняется вовсе. Во втором вызове сначала печатается «считаю» из expensive, затем результат.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.