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
相关产品推荐
相关产品推荐

