我有一段代码如下:
when {
dateFrom == null && dateTo == null -> Unit
dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
dateTo != null -> params["lastUpdated"] = ",$dateTo"
else -> params["lastUpdated"] = "$dateFrom,$dateTo"
}
我是否可以像when
那样循环循环continue
?
我现在正在使用dateFrom == null && dateTo == null -> Unit
,但这不是很优雅。 (dateFrom == null && dateTo == null -> True
也可以,但同样也不是很优雅)
答案 0 :(得分:2)
没有直接的方法可以做到这一点。作为仅返回Unit
(在这种情况下看起来很好)的一种替代方法,您可以将when
语句包装在作用域内联函数调用中,例如run { ... }
和use a return@label
:
run {
when {
dateFrom == null && dateTo == null -> return@run
/* ... */
}
}
如果when
分支比单个语句更复杂,则此构造可能更有用。
答案 1 :(得分:1)
您的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"
}
如果这是您想要的,就没有进一步简化的情况。
答案 2 :(得分:1)
如果您重写条件,则可以摆脱现在拥有Unit
when {
dateFrom != null && dateTo != null -> params["lastUpdated"] = "$dateFrom,$dateTo"
dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
dateTo != null -> params["lastUpdated"] = ",$dateTo"
}