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

相关推荐
倔强的石头10617 分钟前
【C++指南】vector(一):从入门到详解
开发语言·c++
ITLiu_JH30 分钟前
scikit-surprise 智能推荐模块使用说明
开发语言·数据分析·智能推荐
User_芊芊君子37 分钟前
【Java】——数组深度解析(从内存原理到高效应用实践)
java·开发语言
一 乐2 小时前
网红酒店|基于java+vue的网红酒店预定系统(源码+数据库+文档)
java·开发语言·数据库·毕业设计·论文·springboot·网红酒店预定系统
DARLING Zero two♡2 小时前
C++底层学习精进:模板进阶
开发语言·c++·模板
勘察加熊人3 小时前
c++生成html文件helloworld
开发语言·c++·html
xyliiiiiL4 小时前
从责任链模式聊到aware接口
java·开发语言
Elec_z5 小时前
网络深处的守门人
开发语言·网络
闪电麦坤956 小时前
C#:Time.deltaTime
开发语言·c#
Alfadi联盟 萧瑶8 小时前
Python-Django入手
开发语言·python·django