Выбор ответа Middle Лямбды, inline и reified обновлено

Лямбда с получателем

Вопрос

Что означает тип StringBuilder.() -> Unit?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Функция без параметров, где this это StringBuilder. Это функциональный тип с получателем: внутри лямбды this указывает на объект StringBuilder, и его методы вызываются напрямую: append("x").

Варианты ответа

  1. Функция, которая возвращает StringBuilder после вызова
  2. Расширение, которое нельзя вызвать напрямую
  3. Функция, принимающая StringBuilder параметром it
  4. Функция без параметров, где this это StringBuilderправильный ответ

Разбор

Это функциональный тип с получателем: внутри лямбды this указывает на объект StringBuilder, и его методы вызываются напрямую: append("x"). Так устроены buildString { }, apply и DSL (Compose Modifier, Gradle Kotlin DSL). При вызове получатель передаётся как объект: sb.block() или block(sb). Варианту с it соответствует обычный тип (StringBuilder) -> Unit.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.