LINUX.ORG.RU

История изменений

Исправление 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-ов и некоторых других применений.