История изменений
Исправление
Legioner,
(текущая версия)
:
Описание, пример, как можно использовать. Вкратце — можно объявить, что функция принимает параметром другую функцию, при вызове которой this будет установлен на объект определённого типа. При написании этой второй функции (как правило в виде анонимной лямбды) можно использовать поля и методы этого объекта так, как будто эта функция является его членом. По сути простой сахар. Но безумно удобный для builder-ов и некоторых других применений.
Пример:
fun buildString(builderAction: StringBuilder.() -> Unit): String =
StringBuilder().apply(builderAction).toString()
val str = buildString {
append("abc")
append(123)
append("def")
}
аналог на Java:
String buildString(Consumer<StringBuilder> builderAction) {
StringBuilder stringBuilder = new StringBuilder();
builderAction.accept(stringBuilder);
return stringBuilder.toString();
}
String str = buildString(sb -> {
sb.append("abc");
sb.append(123);
sb.append("def");
});
Исправление
Legioner,
:
Описание, пример, как можно использовать. Вкратце — можно объявить, что функция принимает параметром другую функцию, при вызове которой this будет установлен на объект определённого типа. При написании этой второй функции (как правило в виде анонимной лямбды) можно использовать поля и методы этого объекта так, как будто эта функция является его членом. По сути простой сахар. Но безумно удобный для builder-ов и некоторых других применений.
Пример:
fun buildString(builderAction: StringBuilder.() -> Unit): String =
StringBuilder().apply(builderAction).toString()
val str = buildString {
append("abc")
append(123)
append("def")
}
аналог на Java:
String buildString(Consumer<StringBuilder> builderAction) {
StringBuilder stringBuilder = new StringBuilder();
builderAction.accept(stringBuilder);
return stringBuilder.toString();
}
String str = buildString(sb -> {
sb.append("abc");
sb.append(123);
sb.append("def");
});
}
Исходная версия
Legioner,
:
Описание, пример, как можно использовать. Вкратце — можно объявить, что функция принимает параметром другую функцию, при вызове которой this будет установлен на объект определённого типа. При написании этой второй функции (как правило в виде анонимной лямбды) можно использовать поля и методы этого объекта так, как будто эта функция является его членом. По сути простой сахар. Но безумно удобный для builder-ов и некоторых других применений.