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
也应该与标签一起使用。这是目前解决此问题的最佳解决方案。