2

我编写了这个方法来将一个 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 中是否已经内置了类似的语言功能或方法?

4

2 回答 2

4

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

它的方法签名:

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.

于 2016-01-02T01:54:27.067 回答
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).

于 2015-02-22T14:58:36.707 回答