【发布时间】:2022-12-17 20:39:45
【问题描述】:
我最近仔细研究了 Kotlin 的作用域函数,发现有时他们期望将扩展函数作为参数。就拿还和申请举个例子:
public inline fun <T> T.apply(block: T.() -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
return this
}
public inline fun <T> T.also(block: (T) -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block(this)
return this
}
从消费者的角度来看,两者之间似乎没有太大区别,我可以用几乎相同的方式称呼它们:
fun main() {
val logger = Logger.getLogger("Test")
logger.info("A").apply {
logger.info("B")
}.also {
logger.info("C")
}
}
所以我想知道我在这里错过了什么?在高阶函数中使用扩展函数时,Kotlin 中是否存在模式或最佳实践?具体有哪些好处?
【问题讨论】:
标签: kotlin