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 分钟前
Linux:环境变量
linux·开发语言·学习
徐徐同学16 分钟前
cpolar为IT-Tools 解锁公网访问,远程开发再也不卡壳
java·开发语言·分布式
LawrenceLan18 分钟前
Flutter 零基础入门(二十六):StatefulWidget 与状态更新 setState
开发语言·前端·flutter·dart
m0_7482299927 分钟前
Laravel8.X核心功能全解析
开发语言·数据库·php
qq_192779871 小时前
C++模块化编程指南
开发语言·c++·算法
代码村新手1 小时前
C++-String
开发语言·c++
qq_401700412 小时前
Qt 中文乱码的根源:QString::fromLocal8Bit 和 fromUtf8 区别在哪?
开发语言·qt
EndingCoder3 小时前
案例研究:从 JavaScript 迁移到 TypeScript
开发语言·前端·javascript·性能优化·typescript
Yyyyy123jsjs3 小时前
如何通过免费的外汇API轻松获取实时汇率数据
开发语言·python