首页 文章

Kotlin中的交换功能

提问于
浏览
25

是否有更好的方法在kotlin中编写通用交换函数,而不是How to write a basic swap function in Java中描述的java方式 .

是否有任何kotlin语言功能可以使通用交换功能更简洁直观?

5 回答

  • 1

    编辑:感谢@hotkey的评论

    我相信交换两个变量的代码很简单 - 不要再尝试简化它了 .

    最优雅的实施形式恕我直言:

    var a = 1
    var b = 2
    
    run { val temp = a; a = b; b = temp }
    
    println(a) // print 2
    println(b) // print 1
    

    优点:

    • 意图大声而清晰 . 没有人会误解这一点 .

    • temp 不会留在范围内 .

  • 0

    根本不需要在Kotlin中使用交换功能 . 您可以使用现有的also函数,例如:

    var a = 1
    var b = 2
    
    a = b.also { b = a }
    
    println(a) // print 2
    println(b) // print 1
    
  • 8

    如果你想写一些非常可怕的代码,你可以有这样的函数:

    inline operator fun <T> T.invoke(dummy: () -> Unit): T {
        dummy()
        return this
    }
    

    这将允许您编写这样的代码

    a = b { b = a }
    

    请注意,我做 NOT 推荐这个 . 只是表明它是可能的 .

  • 4

    Kotlin鼓励尽可能使用不可变数据(例如使用 val 而不是 var ) . 这大大减少了细微错误的变化,因为它会发生变化 .

    交换两个值与不可变数据完全相反:我是指交换之前或之后 a 的值吗?

    考虑以下面的不可变方式重写代码:

    val a = 1
    val b = 2
    
    val (a2, b2) = b to a
    

    这通过使用destructuring declarations以及创建 Pair 的内置 to 扩展函数来工作 .

  • 30

    这是with的一个很好的用法:

    var a = 1
    var b = 2
    
    with(a) {
        a = b
        b = this
    }
    
    println(a) // 2
    println(b) // 1
    

相关问题