Kotlin中的When语句(如continue或break)的转义

Kotlin中的When语句(如continue或break)的转义,kotlin,control-flow,Kotlin,Control Flow,我有一段代码如下: when { dateFrom == null && dateTo == null -> Unit dateFrom != null -> params["lastUpdated"] = "$dateFrom," dateTo != null -> params["lastUpdated"] = ",$dateTo" else -> params["lastUpdated"

我有一段代码如下:

when {
        dateFrom == null && dateTo == null -> Unit
        dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
        dateTo != null -> params["lastUpdated"] = ",$dateTo"
        else -> params["lastUpdated"] = "$dateFrom,$dateTo"
    }
当以类似于循环中的继续的方式退出时,是否可以退出


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

没有直接的方法可以做到这一点。作为仅返回
Unit
(在本例中看起来很好)的替代方法,您可以将
when
语句包装到作用域内联函数调用中,如和:


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

没有直接的方法。作为仅返回
Unit
(在本例中看起来很好)的替代方法,您可以将
when
语句包装到作用域内联函数调用中,如和:


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

您的
否则的
部分将永远不会成功,因为前3个条件中的1个将是
真的
因此,您的代码与此等效:

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

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

您的
else
部分将永远不会成功,因为前三个条件中有一个是
真的

因此,您的代码与此等效:

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

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

如果您重写您的条件,您可以摆脱现在有
单元的情况。

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

甚至需要else吗?对于两者都为null的情况,OP希望显式返回
Unit
,我认为问题的关键是OP不希望返回
Unit
。他想摆脱这个,就像使用
continue
跳过循环中的迭代一样。如果是这种情况,则可以省略else。是否需要else?对于两者都为null的情况,OP希望显式返回
单位
,我认为问题的关键是OP不希望返回
单位
。他想摆脱这种情况,就像你可以使用
continue
跳过循环中的迭代一样。如果是这种情况,则可以省略else。我认为
when
也应该与标签一起使用。这是目前解决此问题的最佳解决方案。我认为
when
也应该与标签一起使用。这是目前解决此问题的最佳解决方案。