我想从一个函数返回多个值。正如其他 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/