Function kotlin返回布尔函数
我对布尔返回类型函数做了一些研究,发现使用null-able-check更安全。我有一些理解上的问题,编译器不喜欢我所做的。我还尝试了if语句,但不知何故它只返回false。谁能让我清醒一下吗?谢谢Function kotlin返回布尔函数,function,kotlin,Function,Kotlin,我对布尔返回类型函数做了一些研究,发现使用null-able-check更安全。我有一些理解上的问题,编译器不喜欢我所做的。我还尝试了if语句,但不知何故它只返回false。谁能让我清醒一下吗?谢谢 fun check(list:ArrayList<String>): Boolean { var test: Boolean?= null for (i in list) { when (i=="a") { true -&g
fun check(list:ArrayList<String>): Boolean {
var test: Boolean?= null
for (i in list) {
when (i=="a") {
true -> test == true
false -> test == false
}
}
return test!!
}
fun检查(列表:ArrayList):布尔值{
变量测试:布尔?=null
对于(列表中的i){
当(i==“a”){
真->测试==真
false->test==false
}
}
返回测试!!
}
由于此函数只返回true或false,因此不应使变量test
为空。但是如果您删除?
和=null
,编译器会抱怨,因为它不能保证for循环中的代码会被调用(因为列表可能为空)
至于为什么它会给出错误的结果,这是因为您正在更改列表中每个项目的test
值,因此最终值仅取决于列表中的最后一个元素。此外,如果列表为空,test
将保持为空,并且在使用test代码>
我不知道您是否试图查看列表中是否有任何元素是“a”或所有元素是否都是“a”,但为了便于讨论,我假设它是第一个元素。因此,这里的策略是将false设为默认值,如果发现任何元素为“a”,则将其更改为true。一旦你找到一个,就没有理由继续检查,这样你就可以打破循环
var test = false // not nullable
for (i in list)
if (i == "a") {
test = true
break
}
return test
作为补充说明,Kotlin有一个用于List的高阶函数,用于检查满足lambda的任何元素,以便用
return list.any { it == "a" }
另一个旁注:如果您是基于某些条件设置布尔值,那么when语句就太过分了,会使代码更加复杂。您可以将when语句替换为test=i==“a”
,并具有相同的行为(尽管您发现,从一开始就不是正确的行为) Woahs when
语句的是怎么回事?我猜您正在查找列表。任何{it==“a”}
。进一步的代码改进将使其成为扩展函数,并使类型更通用;然后整个事情就变得有趣了。check()=any{it==“a”}
。