我正在尝试比较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)
我是如何实现这一目标的?
谢谢!
答案 0 :(得分:5)
在Kotlin 1.1中引入了未使用变量的下划线,它被设计为在解构声明中不需要某些变量时使用。
在表达式的分支条件中,Triple(0, 0, 0)
正在创建新实例但不会解构。因此,此处不允许使用下划线。
目前,在Kotlin中无法表达的分支条件下进行解构。您的案例的解决方案之一是在每个分支条件中详细比较每个组件:
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是关于表达时的解构的讨论。