kotlin - Kotlin 中的解构声明

标签 kotlin

我想从一个函数返回多个值。正如其他 SO 答案所建议的那样,我将 Destructuring 与公共(public)类一起使用,但问题是我无法将返回的 Destructing 结果分配给已经令人兴奋的变量

data class Result(val res1 :Int, val res2: Int)
class test{
        fun retresult():Result{
        return Result(2,2)
    }
}

fun main(args: Array<String>) {
    var var1:Int = 0
    var var2:Int = 0
    var des = test()
    //(var1, var2) = des.retresult() this doesn't work

    var1 = des.retresult().res1
    var2 = des.retresult().res2 // **works but calls function twice** 
}

我不想在返回点初始化本地变量,例如
 val (var1, var2) = des.retresult()

最佳答案

您可以使用 with 分配这两个变量而无需调用该函数两次。 :

fun main(args: Array<String>) {
    var var1:Int = 0
    var var2:Int = 0
    var des = test()
    with (des.retresult()) {
        var1 = res1
        var2 = res2
    }
}

或者,您的函数可以采用函数参数来设置结果,然后您可以传递这些属性的 setter 。这不适用于局部变量,仅适用于成员属性。如果您使用 C,这有点像将指针传递给函数,因此它可以直接修改变量而不是返回某些内容。
class Test (var one: Int, var two: Int)

fun doSomething(result1: (Int) -> Unit, result2: (Int) -> Unit) {
    result1(2)
    result2(2)
}

fun main() {
    val test = Test(1, 1)
    doSomething(test::one::set, test::two::set)
}

有一个开放的(似乎大部分都被遗忘了)feature request对于您的建议,解构对现有变量的赋值。

关于kotlin - Kotlin 中的解构声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60867626/

相关文章:

java - Android Cam 致命异常文件 URI 暴露

kotlin - 许多可为空的对象,如何在路径末尾设置属性

android - "Place was called on a node which was placed already"

java - 创建公共(public)库时有没有办法摆脱 "unused"和 "MemberVisibilityCanBePrivate"

kotlin - 在kotlin中我可以在一行中初始化一个对象并设置参数

android - 创建垂直分隔线 Jetpack Compose

Android:如何在 TextView 中对齐文本?

android.support.v4.app.FragmentManager 不能在没有 @Provides- 或 @Produces- 注释的方法的情况下提供

generics - Kotlin:是否可以拥有依赖于实现泛型类型的常量属性?

unit-testing - 在 Kotlin 中模拟 "global"属性