在 Kotlin 中逃离 When 语句(如继续或中断)

Escape from When-Statement (like continue or break) in Kotlin

我有一段代码如下:

when {
        dateFrom == null && dateTo == null -> Unit
        dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
        dateTo != null -> params["lastUpdated"] = ",$dateTo"
        else -> params["lastUpdated"] = "$dateFrom,$dateTo"
    }

我可以在循环中以类似于 continue 的方式转义 when 吗?

我现在正在使用 dateFrom == null && dateTo == null -> Unit 但这不是很优雅。 (dateFrom == null && dateTo == null -> True也是可以的,同样,不太优雅)

没有直接的方法可以做到这一点。作为仅返回 Unit 的替代方法,在这种情况下看起来不错,您可以将 when 语句包装在作用域内联函数调用中,例如 run { ... }, and use a return@label:

run { 
    when {
        dateFrom == null && dateTo == null -> return@run
        /* ... */
    }
}

如果 when 分支比单个语句更复杂,则此构造可能更有用。

您的 else 部分永远不会成功,因为前 3 个条件中的 1 个将是 true
所以你的代码等同于:

when {
    dateFrom == null && dateTo == null -> Unit
    dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
    dateTo != null -> params["lastUpdated"] = ",$dateTo"
}

最后是这个:

when {
    dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
    dateTo != null -> params["lastUpdated"] = ",$dateTo"
    else -> Unit
}

我想也许你想要:

when {
    dateFrom != null && dateTo != null -> params["lastUpdated"] = "$dateFrom,$dateTo"
    dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
    dateTo != null -> params["lastUpdated"] = ",$dateTo"
}

如果这就是您想要的,那么就没有进一步简化的情况了。

如果你重写你的条件,你可以摆脱现在的情况 Unit

when {
    dateFrom != null && dateTo != null -> params["lastUpdated"] = "$dateFrom,$dateTo"
    dateFrom != null                   -> params["lastUpdated"] = "$dateFrom,"
    dateTo != null                     -> params["lastUpdated"] = ",$dateTo"
}