在 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"
}
我有一段代码如下:
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"
}