在比较中无视Triple的组件

我试图比较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") } 

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

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

任何想法我可以如何实现这一目标?

谢谢!

在Kotlin 1.1中引入了未使用的variables的下划线,并且在解构声明中不需要一些variables时使用它。

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

目前,在科特林不可能expression的分支条件下解构。 您的案例的解决方案之一是比较每个分支条件的每个组件详细:

 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") } 

这里是关于在expression时解构的讨论。