Is there a built in Kotlin method to apply void function to value?

对着背影说爱祢 提交于 2019-11-28 09:58:11

问题


I wrote this method to apply a void function to a value and return the value.

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

This is useful in reducing something like this:

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

To something like this:

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

Is there a language feature or method like this already build in to Kotlin?


回答1:


I ran into the same problem. My solution is basicly the same as yours with a small refinement:

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

Note, that f is an extension function. This way you can invoke methods on your object using the implicit this reference. Here's an example taken from a libGDX project of mine:

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

Of course you could also call doStuff(this).




回答2:


Apply is in the Kotlin standard library: See the docs here: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/apply.html

Its method signature:

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

Calls the specified function f with this value as its receiver and returns this value.



来源:https://stackoverflow.com/questions/28504635/is-there-a-built-in-kotlin-method-to-apply-void-function-to-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!