有人可以向我解释为什么这些代码会阻止打印这些行 通常,我们使用时来控制数据流,使用多种可能性,例如 is!in in!in 这里是我的代码:
fun isNumber(obj: Any) {
when (obj) {
!is Long, Int, Float, Double -> {
println("No it's not a number")
}
else -> {
println("Yes it's a number")
}
}
}
fun main(args: Array<String>) {
isNumber(19.10)
isNumber(19L)
isNumber(19)
isNumber(19.10F)
}
结果:
No it's not a number
Yes it's a number
No it's not a number
No it's not a number
答案 0 :(得分:5)
以逗号分隔的条件使用OR
进行评估,每个条件都由它们自己评估,因此我们应该像这样转过来:
when (obj) {
is Long, is Int, is Float, is Double -> {
println("Yes it's a number")
}
else -> {
println("No it's not a number")
}
}
您的构造不起作用的原因是,当您在is
中遗漏!is Long, Int, Float, Double ->
时,我们已经(简化):
when (obj) {
Int -> {
}
else -> {
}
}
表示您检查obj
是否等于班级Int
,而不是检查obj
是Int
的实例。
此外,即使我们将!is
添加到每个数字类型,例如:
when (obj) {
!is Long, !is Int, !is Float, !is Double -> {
println("No it's not a number")
}
else -> {
println("Yes it's a number")
}
}
它仍然无效,因为如上所述,条件将使用OR
进行评估,因此所有内容都不是“数字”,因为所有内容都是不长或 <等等