检查Kotlin中when语句中的数组大小和列表大小

Vda*_*dav 8 java kotlin

我是Kotlin的新手和编程.我非常喜欢模式匹配的想法,正如您在下面的代码中看到的那样,我正在尝试使用when语句.

fun main(args: Array<String>) {


    val myAr = arrayOf(1,2,3)
    val myL = listOf(1,2,3)

    fun probablyBlind() {

       when(myL.size != myAr.size) {

          myL.size > myAr.size -> {
            println("myL.size > myAr.size = ${myL.size > myAr.size}")
          }
          myL.size < myAr.size -> myAr.forEach { println(it) }
      }

      if(myL.size != myAr.size) {
        println("Inside if. myL.size > myAr.size = 
        ${myL.size > myAr.size}")
      }
   }

   probablyBlind()
 }
Run Code Online (Sandbox Code Playgroud)

如果您运行代码,结果是:

myL.size > myAr.size = false
Run Code Online (Sandbox Code Playgroud)

这意味着在某些时候列表的大小与数组的大小不同.然后它在when语句中计算为true的第一个比较.但后来打印出来的是虚假的.这意味着它不应该运行这部分代码.if语句永远不会计算为true.

有人可以帮我这个吗?也许这是我目前无法看到的非常简单的事情.如果是这样的话,请原谅.

Mar*_*nik 11

when(myL.size != myAr.size)
Run Code Online (Sandbox Code Playgroud)

在这里你指定when-expression是一个Boolean值,比较MyL.size和的结果myAr.size.假设它们相等,这意味着您搜索值的匹配项false.

myL.size > myAr.size- 你的第一个条款when.由于大小相等,因此计算false并匹配when-expression.

你真正想说的只是

when {
    myL.size > myAr.size -> {
        println("myL.size > myAr.size = ${myL.size > myAr.size}")
      }
    myL.size < myAr.size -> myAr.forEach { println(it) }
}
Run Code Online (Sandbox Code Playgroud)