Существует ли встроенный метод Котлина для применения void-функции к значению?

Я написал этот метод, чтобы применить функцию void к значению и вернуть его.

public inline fun <T> T.apply(f: (T) -> Unit): T {
    f(this)
    return this
}

Это полезно для уменьшения примерно так:

return values.map {
    var other = it.toOther()
    doStuff(other)
    return other
}

Чтобы что-то вроде этого:

return values.map { it.toOther().apply({ doStuff(it) }) }

Есть ли такая особенность или метод языка, которые уже встроены в Kotlin?

2 ответа

Решение

Я столкнулся с той же проблемой. Мое решение в основном такое же, как у вас, с небольшим уточнением:

inline fun <T> T.apply(f: T.() -> Any): T {
    this.f()
    return this
}

Обратите внимание, что f является функцией расширения. Таким образом, вы можете вызывать методы для вашего объекта, используя неявные this ссылка. Вот пример, взятый из моего проекта libGDX:

val sprite : Sprite = atlas.createSprite("foo") apply {
    setSize(SIZE, SIZE)
    setOrigin(SIZE / 2, SIZE / 2)
}

Конечно, вы также можете позвонить doStuff(this),

Apply находится в стандартной библиотеке Kotlin: см. Документы здесь: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/apply.html

Его метод подписи:

inline fun <T> T.apply(f: T.() -> Unit): T (source)

Вызывает указанную функцию f с этим значением в качестве получателя и возвращает это значение.

Другие вопросы по тегам