Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function kotlin返回布尔函数_Function_Kotlin - Fatal编程技术网

Function kotlin返回布尔函数

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

我对布尔返回类型函数做了一些研究,发现使用null-able-check更安全。我有一些理解上的问题,编译器不喜欢我所做的。我还尝试了if语句,但不知何故它只返回false。谁能让我清醒一下吗?谢谢

    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”}