gpt4 book ai didi

Kotlin 嵌套时

转载 作者:行者123 更新时间:2023-12-02 08:35:38 25 4
gpt4 key购买 nike

我有下一个代码。正如您所看到的,有 3 个 when 一个在另一个内。是否可以扁平化这段代码?我正在考虑一些包装,但无法得到它。目前,我看到的唯一解决方案是将每个时间移动到fun,例如processFirstWhen等。也许有一个更干净的解决方案。任何帮助表示赞赏。

when (val result = callback.invoke()) {
is DataCompletable.Success -> DomainCompletable.Success
is DataCompletable.Error ->
when (result.error) {
is DataError.Unauthorized ->
when (tokenMixIn.refresh()) {
is DomainCompletable.Success -> execute(
currentNumberOfRetries + 1,
callback
)
is DomainCompletable.Error -> DomainCompletable.Error(DomainError.RefreshFailed)
}
else -> DomainCompletable.Error(result.error.mapToDomain())
}

最佳答案

简单!但不使用when

我想用 if 的扁平层次结构来替换它。

像这样:

val result = callback.invoke()
if(result is DataCompletable.Success) return DomainCompletable.Success
val error = result.error
if(error !is DataError.Unauthorized) return DomainCompletable.Error(result.error.mapToDomain())
val refreshResult = tokenMixIn.refresh()
if(refreshResult is DomainCompletable.Error) return DomainCompletable.Error(DomainError.RefreshFailed)
execute(currentNumberOfRetries + 1, callback)

这里的关键方面是短路。我们尽快返回结果。而且我们还实现了更扁平、更容易理解的代码。

关于Kotlin 嵌套时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59470003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com