Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin嵌套在_Kotlin - Fatal编程技术网

Kotlin嵌套在

Kotlin嵌套在,kotlin,Kotlin,我有下一个密码。正如您可能看到的,当一个在另一个中时,有3个。是否有可能将此代码展平?我想买些包装纸,但买不到。目前,我看到的唯一解决方案是将每个when移动到fun中,比如processFirstWhen等。也许有一个更干净的解决方案。谢谢你的帮助 when (val result = callback.invoke()) { is DataCompletable.Success -> DomainCompletable.Success i

我有下一个密码。正如您可能看到的,当一个
在另一个
中时,有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())
                }

轻松点!但在
时不使用

我想用
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)

这里的关键是短路。我们会尽快返回结果。但我们也实现了更平坦、更容易理解的代码。

是否可以从库中获取DomainCompletable、DataCompletable和DataError?@Tenfour04不,它们是我的类看起来您的类层次结构和设计强制使用嵌套语句,但我不能在不了解其工作原理的情况下提出任何建议。我们可以从中创建两个对象吗?我指的是一个负责回调调用的对象,另一个负责处理您案例中的错误场景。error对象将仅在某些先决条件下调用,我正在讨论这些tokenMixIn.refresh()。根据这个值,我不确定它会做什么,但根据这些值,它将移动到下一层。