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

是否有内置的Kotlin方法将void函数应用于值?,kotlin,utility-method,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(

我编写此方法是为了对值应用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是否已经内置了这样的语言功能或方法?

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

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

当然,您也可以调用
doStuff(this)

应用程序位于Kotlin标准库中:请参阅此处的文档:

其方法签名:

inline fun <T> T.apply(f: T.() -> Unit): T (source)
inline fun T.apply(f:T.()->单位):T(源)
使用此值作为其接收器调用指定函数f并返回此值


就我的教育而言,
doStuff
的重点是评估它的副作用,有点像Java8流中的
peek
方法?是的,我认为它类似于
peek
,但应用于对象而不是流。它还让我想起了RxJava的
doOnNext()
,但同样适用于对象而不是流。而
doStuff
的要点实际上取决于用户,但在我的例子中,它是向
other
添加一个缓存。相关问题。您可以自由投票或启动以获取更新。
apply
功能现在是Kotlin标准库的一部分。有关详细信息,请参见下面的答案。将在M13中添加一个类似的库方法:
apply
函数现在是Kotlin标准库的一部分。
inline fun <T> T.apply(f: T.() -> Unit): T (source)