如何在kotlin中将if表达式与return @一起使用?

时间:2020-07-15 16:22:00

标签: kotlin

我应该使用什么代替whats_there参数,以使x的值为0?

val x =
    if (true) {
        for (i in 1..5)
            if (i == 4)
                return@whats_there 0
        1
    }
    else 2

3 个答案:

答案 0 :(得分:2)

val x = if (ok) run {
    for (i in 1..5) {
        if (i == someValue)
            return@run 10
    }
    5
} else 2

val x = if (ok) {
    if (someValue in 1..5) 10 else 5
} else 2

答案 1 :(得分:1)

使用类似这样的return很难阅读并且容易出错。该示例可能过于简化而无法显示您的实际问题,但看起来您可以使用any(),例如:

val x =
    if (true) {
        if ((1..5).any{ it == 4 })
            0
        else
            1
    } else
        2

这可能比循环更好地表达了您的意图。

您可能会发现重新排序案件更加清晰,因此可以使用when

val x = when {
    !true -> 2
    (1..5).any{ it == 4 } -> 0
    else -> 1
}

答案 2 :(得分:0)

为了解决我的问题,我使用了@ IR42作为第一个解决方案,但我不得不以不同的方式使用它:

val x = run { 
    if (ok){ 
        for (i in 1..5) 
            if (i == someValue)
                return@run 10
        5
    }
    else 2
}