gpt4 book ai didi

kotlin - 在比较中忽略三元组的组成部分

转载 作者:行者123 更新时间:2023-12-04 06:38:43 25 4
gpt4 key购买 nike

我正在尝试比较 Triple 而忽略 Triple 的某些值。下面我希望忽略的值由 _ 表示。请注意,以下代码仅供示例使用,无法编译,因为 _Unresolved reference

val coordinates = Triple(3, 2, 5)
when (coordinates) {
Triple(0, 0, 0) -> println("Origin")
Triple(_, 0, 0)-> println("On the x-axis.")
Triple(0, _, 0)-> println("On the y-axis.")
Triple(0, 0, _)-> println("On the z-axis.")
else-> println("Somewhere in space")
}

我知道你可以在 destructuring 时使用 _如果您想忽略一个值,但这似乎对我解决上述问题没有帮助:

val (x4, y4, _) = coordinates
println(x4)
println(y4)

有什么办法可以实现吗?

谢谢!

最佳答案

未使用变量的下划线是在 Kotlin 1.1 中引入的,它被设计为在解构声明中不需要某些变量时使用。

在 when 表达式的分支条件中,Triple(0, 0, 0) 正在创建一个新实例但不是解构。因此,这里不允许使用下划线。

目前,在 Kotlin 中无法对 when 表达式的分支条件进行解构。针对您的情况的解决方案之一是在每个分支条件中详细比较每个组件:

val (x, y, z) = Triple(3, 2, 5)
when {
x == 0 && y == 0 && z == 0 -> println("Origin")
y == 0 && z == 0 -> println("On the x-axis.")
x == 0 && z == 0 -> println("On the y-axis.")
x == 0 && y == 0 -> println("On the z-axis.")
else -> println("Somewhere in space")
}

Here是关于 when 表达式中的解构的讨论。

关于kotlin - 在比较中忽略三元组的组成部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48134700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com