首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Kotlin的简约

用Kotlin的简约
EN

Stack Overflow用户
提问于 2021-04-21 05:43:48
回答 1查看 342关注 0票数 0

是否有一种方法可以通过用lambdainfix或其他任何方法来删除snackbar中的这个lambda块,从而使它在认知复杂性上没有+2嵌套。

代码语言:javascript
复制
else {
snackBarBuilder(
                    activities,
                    "failure",
                    "Sorry, text " + if (classofobj.innerclass.toString() == "1") {
                        "good"
                    } else {
                        "bad"
                    }
                )
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 07:05:52

您可以定义自己的通用三元函数

代码语言:javascript
复制
fun <T> ternary(predicate: () -> Boolean, trueCase: () -> T, falseCase: () -> T) =
    if (predicate()) {
        trueCase()
    } else {
        falseCase()
    }

然后像这样使用它:

代码语言:javascript
复制
ternary({ true }, { "was true" }, { "was false" })
    .also { println(it) } // prints: was true

// or

"Sorry, text " + ternary( { classofobj.innerclass.toString() == "1"} , {"good"}, {"bad"} )

您也可以使用infix变体,但我怀疑它是否会使更易读--它有一些附加的优先条件

代码语言:javascript
复制
infix fun <T> (() -> Boolean).ternary(tfOptions: List<() -> T>): T =
    when (this()) {
        true -> tfOptions[0]()
        false -> tfOptions[1]()
    }

// and then

val result = { true } ternary listOf({ "was true" }, { "was false" })
println(result) // prints: was true
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67189888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档