仅使用一个已声明参数的Kotlin解构声明

仅使用一个已声明参数的Kotlin解构声明,kotlin,destructuring,Kotlin,Destructuring,根据,声明的组件应与右侧的组件数量相匹配: 只要可以调用所需数量的组件函数,任何东西都可以位于解构声明的右侧 但是,我发现,即使左侧的组件数量与赋值语句右侧的组件数量不一样,这种方法也可以工作 fun main() { val (firstOnly) = Pair("key", "value") println("firstOnly=${firstOnly}") } 这是合法的Kotlin还是一个bug?如果是合

根据,声明的组件应与右侧的组件数量相匹配:


只要可以调用所需数量的组件函数,任何东西都可以位于解构声明的右侧

但是,我发现,即使左侧的组件数量与赋值语句右侧的组件数量不一样,这种方法也可以工作

fun main() {   
    val (firstOnly) = Pair("key", "value")
    println("firstOnly=${firstOnly}")
}
这是合法的Kotlin还是一个bug?如果是合法的,有参考资料吗

如果是合法的,有参考资料吗

说:

约定定义的一个特例是属性的分解声明[…]

此约定允许通过在构建过程中立即对属性进行分解来引入多个(一个或多个)属性来代替一个属性

它说的是“一个或多个”,所以是的,通过解构声明单个属性是允许的

还请注意,“可以对其调用所需数量的组件函数”并不意味着组件函数的数量必须等于所声明的属性的数量。让我们这样说:如果我有两个苹果,需要一个苹果。我有“规定数量的苹果”吗?答案显然是肯定的

如果您仍然不清楚,我认为规范会更好地说明:

对于每个标识符,对应的运算符函数组件k带有 如果K等于占位符在声明中的位置(从1开始),则调用K时不带参数

这意味着这些函数调用必须是有效的。是否存在其他组件功能与此无关

如果是合法的,有参考资料吗

说:

约定定义的一个特例是属性的分解声明[…]

此约定允许通过在构建过程中立即对属性进行分解来引入多个(一个或多个)属性来代替一个属性

它说的是“一个或多个”,所以是的,通过解构声明单个属性是允许的

还请注意,“可以对其调用所需数量的组件函数”并不意味着组件函数的数量必须等于所声明的属性的数量。让我们这样说:如果我有两个苹果,需要一个苹果。我有“规定数量的苹果”吗?答案显然是肯定的

如果您仍然不清楚,我认为规范会更好地说明:

对于每个标识符,对应的运算符函数组件k带有 如果K等于占位符在声明中的位置(从1开始),则调用K时不带参数


这意味着这些函数调用必须是有效的。其他组件功能是否存在与此无关。

来自您链接到的文档:


只要可以调用所需数量的组件函数,任何东西都可以位于解构声明的右侧

它并没有说它必须匹配左边声明的变量数量,只是说它具有所需的数量

事实上,这在分解列表结构时非常有用:

val (first, second) = listOf(1, 2, 3, 4, 5)
文件包括:

如果此列表的大小小于1,则抛出一个
索引AutofBoundsException


同样,它不会将列表大小限制为1。

来自您链接到的文档:


只要可以调用所需数量的组件函数,任何东西都可以位于解构声明的右侧

它并没有说它必须匹配左边声明的变量数量,只是说它具有所需的数量

事实上,这在分解列表结构时非常有用:

val (first, second) = listOf(1, 2, 3, 4, 5)
文件包括:

如果此列表的大小小于1,则抛出一个
索引AutofBoundsException


同样,它没有限制列表的大小为1。

“只要所需数量的组件函数可以在其上调用,
Pair
具有
component1()
,因此这里没有问题。”只要所需数量的组件函数可以在其上调用,
Pair
具有
component1()
,所以这里没有问题。谢谢这是我要找的。谢谢这是我要找的。