我编写了这个方法,将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是否已经内置了这样的语言功能或方法?
答案 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)
。