You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin是否存在返回操作前旧值的作用域函数?

结论

Kotlin 官方标准库没有提供功能完全匹配的内置函数,你需要自行实现该扩展函数。

实现说明

你需要的功能分两种场景处理:

  • 如果你需要拿到的是操作前列表元素的快照(即修改原列表后,返回值不会跟着变化),可以使用如下实现:
inline fun <T> MutableList<T>.alsoButGetPrevious(block: (MutableList<T>) -> Unit): List<T> {
    val previousSnapshot = this.toList()
    block(this)
    return previousSnapshot
}

该实现完全匹配你给出的示例使用方式,调用val localList: List<String> = mainList.alsoButGetPrevious { it.clear() }后,localList会保留clear执行前的所有元素,不受后续mainList修改的影响。

  • 如果你只是需要返回原对象的引用,不需要保留操作前的元素状态,直接使用标准库自带的also即可,also本身就会返回接收者对象本身。不过因为可变列表是引用类型,返回的引用和原列表指向同一块内存,原列表修改后返回值也会同步变化,无法留存操作前的内容。

内容的提问来源于stack exchange,提问作者k314159

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:48:01