Существует ли встроенный метод Котлина для применения 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 с этим значением в качестве получателя и возвращает это значение.