我有一段代码如下:
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
也有可能,但同样,不是很优雅)
你的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
语句,如run { ... }
和use a return@label
:
run {
when {
dateFrom == null && dateTo == null -> return@run
/* ... */
}
}
如果when
分支比单个语句更复杂,则此构造可能更有用。
如果你改写你的条件,你可以摆脱你现在有Unit
的情况
when {
dateFrom != null && dateTo != null -> params["lastUpdated"] = "$dateFrom,$dateTo"
dateFrom != null -> params["lastUpdated"] = "$dateFrom,"
dateTo != null -> params["lastUpdated"] = ",$dateTo"
}