我是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)
| 归档时间: |
|
| 查看次数: |
4463 次 |
| 最近记录: |