在kotlin中正确使用时如何控制数据流
有人能给我解释一下为什么这些代码会打印这些行吗 通常,我们使用多种可能性来控制数据流,如is!他进来了!下面是我的代码:在kotlin中正确使用时如何控制数据流,kotlin,Kotlin,有人能给我解释一下为什么这些代码会打印这些行吗 通常,我们使用多种可能性来控制数据流,如is!他进来了!下面是我的代码: fun isNumber(obj: Any) { when (obj) { !is Long, Int, Float, Double -> { println("No it's not a number") } else -> { println("Yes i
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)
}
逗号分隔的条件使用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")
}
}
您的构造不起作用的原因是,当您忽略时,它是在!是Long,Int,Float,Double->然后我们简化了:
when (obj) {
Int -> {
}
else -> {
}
}
这意味着检查obj是否等于Int类,而不是检查obj是否是Int的实例
此外,即使我们添加了!适用于每种数字类型,如:
when (obj) {
!is Long, !is Int, !is Float, !is Double -> {
println("No it's not a number")
}
else -> {
println("Yes it's a number")
}
}
它仍然不起作用,因为如前所述,条件将使用或进行计算,因此所有条件都将是“非数字”,因为所有条件都不是长的或不是整数等。逗号分隔的条件都使用或进行计算,每个条件都有自己的值,因此我们应该像这样扭转局面:
when (obj) {
is Long, is Int, is Float, is Double -> {
println("Yes it's a number")
}
else -> {
println("No it's not a number")
}
}
您的构造不起作用的原因是,当您忽略时,它是在!是Long,Int,Float,Double->然后我们简化了:
when (obj) {
Int -> {
}
else -> {
}
}
这意味着检查obj是否等于Int类,而不是检查obj是否是Int的实例
此外,即使我们添加了!适用于每种数字类型,如:
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进行计算,因此所有内容都将是“非数字”,因为所有内容都不是长的或不是Int等。这就是我所想的,OP语法是错误的,因为他正在比较obj是否长,以及obj是否是Int、Float或Double类类型。这么说,您的解决方案既不起作用,但它应该……只是一句话:中出现的Int是Long,Int不是类型,而是Int类型的伴生对象。这就是我所想的,OP语法是错误的,因为他正在比较obj是Long还是obj是Int、Float或Double类型的类。这么说,你的解决方案既不起作用,但它应该……只是一句话:中出现的Int很长,Int不是类型,而是Int类型的伴随对象。顺便说一下,检查也可以按fun isNumberobj:Any=obj是数字来做。顺便说一下,检查也可以按fun isNumberobj:Any=obj是数字来做。