Kotlin apply 交换两个数

代码:

kotlin 复制代码
fun main() {
    var a = 1
    var b = 2
    a = b.apply {
        b = a
        println("$b")
        println("$this")
    }

    println("$a $b")
}


打印结果:
1
2
2 1

原理分析:

kotlin 复制代码
/**
 * Calls the specified function [block] with `this` value as its receiver and returns `this` value.
 *
 * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#apply).
 */
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

我们看到apply 返回的this 其实就不是b了

所以b虽然在block() 里面被改了值 但是最后赋值给a 的是this

太棒了 交换两个数 不用temp变量去做中间容器了

相关推荐
电子_咸鱼2 分钟前
LeetCode-hot100——验证二叉搜索树
开发语言·数据结构·c++·算法·leetcode·深度优先
tryCbest25 分钟前
Java实现文件下载
java·开发语言
暖木生晖28 分钟前
Javascript变量介绍
开发语言·javascript·ecmascript
心.c32 分钟前
JavaScript继承详讲
开发语言·javascript·ecmascript
立方世界38 分钟前
【Leaflet.js实战】地图标记与弹窗:从基础到高级的完整实现
开发语言·javascript·ecmascript
saber_andlibert2 小时前
【Linux】深入理解Linux的进程(一)
linux·运维·服务器·开发语言·c++
yanqiaofanhua5 小时前
C语言自学--数据在内存中的存储
c语言·开发语言
计算机软件程序设计8 小时前
基于Python的二手车价格数据分析与预测系统的设计与实现
开发语言·python·数据分析·预测系统
꒰ঌ 安卓开发໒꒱9 小时前
Java面试-并发面试(二)
java·开发语言·面试
比特森林探险记9 小时前
Golang面试-Channel
服务器·开发语言·golang