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变量去做中间容器了

相关推荐
HyperAI超神经21 分钟前
【vLLM 学习】Aqlm 示例
java·开发语言·数据库·人工智能·学习·教程·vllm
小柒的博客32 分钟前
从C语言变量看内存
c语言·开发语言
张力尹40 分钟前
关于 MutableSharedFlow 的 tryEmit 和 emit 争议说法
android·面试·kotlin
炯哈哈1 小时前
【上位机——MFC】菜单类与工具栏
开发语言·c++·mfc·上位机
2401_846535951 小时前
spark和hadoop的区别与联系
开发语言·spark
爱编程的王小美1 小时前
Scala 入门指南
开发语言·后端·scala
AKIKZ1 小时前
[Python] 入门核心笔记
开发语言·python
{⌐■_■}1 小时前
【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
java·开发语言·javascript·jvm·数据库·后端·golang
碎梦归途2 小时前
23种设计模式-创建型模式之建造者模式(Java版本)
java·开发语言·jvm·设计模式·intellij-idea·建造者模式
Qiuner2 小时前
DeepSeek+Cursor+Devbox+Sealos项目实战
开发语言·cursor·deepseek·devbox