在 Kotlin 中将对分配给已定义的变量
Assigning Pairs to Already Defined Vars in Kotlin
我正在尝试 return 从一个函数中提取一对并将其分配给已在 Kotlin 中定义的变量。
到目前为止,我看到从函数接收到的对的方式是:
val/var (thing1, thing2) = FunctionReturningPair()
是否可以将已定义的变量分配给该对?类似于:
var thing1: String
var thing2:int
//do other things here
(thing1, thing2) = FunctionReturningPair()
//note that thing1 and thing2 were ALREADY DEFINED.
我看不出为什么这行不通,但显然行不通。在 docs 中,我也没有看到任何提及这样做的内容。如果达成共识,通常会添加功能 1. 人们认为它们是必需的。 2. 他们不会破坏其他东西/或造成混淆。所以我猜其中一个条件没有被满足,或者没有人要求它。
如果您真的想要它,可能值得检查 youtrack 看看是否有人请求它。如果他们投票赞成,如果没有,写一个功能请求。
到那时,我猜你会被以下其中一种方法困住:
val p = functionReturningPair()
thing1 = p.first
thing2 = p.second
或
functionReturningPair().let { (first, second) -> thing1 = first; thing2 = second }
不幸的是,据我所知这是不允许的。当前的 Kotlin 语法允许 destructuring declarations,但只有当您当时 声明 变量时才有效。在您的示例中,您声明了上面的变量并且只想分配一个值。
正在查看 grammar makes it clear that assignment
only accepts a directlyAssignableExpression
(such as a simpleIdentifier
). A declaration
instead accepts a multiVariableDeclaration
。
我正在尝试 return 从一个函数中提取一对并将其分配给已在 Kotlin 中定义的变量。
到目前为止,我看到从函数接收到的对的方式是:
val/var (thing1, thing2) = FunctionReturningPair()
是否可以将已定义的变量分配给该对?类似于:
var thing1: String
var thing2:int
//do other things here
(thing1, thing2) = FunctionReturningPair()
//note that thing1 and thing2 were ALREADY DEFINED.
我看不出为什么这行不通,但显然行不通。在 docs 中,我也没有看到任何提及这样做的内容。如果达成共识,通常会添加功能 1. 人们认为它们是必需的。 2. 他们不会破坏其他东西/或造成混淆。所以我猜其中一个条件没有被满足,或者没有人要求它。
如果您真的想要它,可能值得检查 youtrack 看看是否有人请求它。如果他们投票赞成,如果没有,写一个功能请求。
到那时,我猜你会被以下其中一种方法困住:
val p = functionReturningPair()
thing1 = p.first
thing2 = p.second
或
functionReturningPair().let { (first, second) -> thing1 = first; thing2 = second }
不幸的是,据我所知这是不允许的。当前的 Kotlin 语法允许 destructuring declarations,但只有当您当时 声明 变量时才有效。在您的示例中,您声明了上面的变量并且只想分配一个值。
正在查看 grammar makes it clear that assignment
only accepts a directlyAssignableExpression
(such as a simpleIdentifier
). A declaration
instead accepts a multiVariableDeclaration
。