Что выведет код Junior Лямбды, inline и reified обновлено
Функция, возвращающая функцию
Вопрос
Что выведет код? По строке на каждый вывод.
fun multiplier(k: Int): (Int) -> Int = { it * k }
fun main() {
val double = multiplier(2)
val triple = multiplier(3)
println(double(5))
println(triple(double(1)))
val ops = listOf(double, triple, { x: Int -> x - 1 })
println(ops.map { it(10) })
println(ops.fold(1) { acc, f -> f(acc) })
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 10, 6, [20, 30, 9], 5. multiplier возвращает лямбду, которая запомнила k (замыкание). triple(double(1)) это 3 · 2 · 1 = 6.
Что выведет
10
6
[20, 30, 9]
5
Разбор
multiplier возвращает лямбду, которая запомнила k (замыкание). triple(double(1)) это 3 · 2 · 1 = 6. Список функций применяется к 10. fold прогоняет 1 через все функции по очереди: 1 · 2 = 2, 2 · 3 = 6, 6 - 1 = 5.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.