是否有内置的Kotlin方法将void函数应用于值?

时间:2015-02-13 16:51:46

标签: kotlin utility-method

我编写了这个方法,将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 个答案:

答案 0 :(得分:4)

申请在Kotlin标准库中:请参阅此处的文档:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/apply.html

其方法签名:

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

使用此值作为接收器调用指定的函数f并返回该值。

答案 1 :(得分:1)

我遇到了同样的问题。我的解决方案与您的解决方案基本相同,只有一个小的改进:

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)