首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android kotlin infix问题

Android kotlin infix问题
EN

Stack Overflow用户
提问于 2017-08-20 19:32:54
回答 2查看 167关注 0票数 0

我遇到了一个有趣的问题。调试应用程序时,isResColorIdfalse。不幸的是,let函数被触发,我在logcat上看到了qwe

代码语言:javascript
复制
fun drawableTint(context: Context, view: View, colorID: Int, isResColorId: Boolean = true) {
    try {
        val wrap = DrawableCompat.wrap(view.background)
        DrawableCompat.setTint(wrap, isResColorId then let { Timber.d("qwe"); ContextCompat.getColor(context, colorID) } ?: colorID)
        view.setBackgroundDrawable(wrap)
    }catch (e: Resources.NotFoundException){
        Timber.e(e, "c_id: $colorID coz: $isResColorId")
    }
}

infix fun <T> Boolean.then(param: T): T? = if (this) param else null

逻辑猫:

代码语言:javascript
复制
qwe
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-20 19:39:30

为了确定发生了什么,您应该在lambda中打印it。但可能发生的是:

代码语言:javascript
复制
isResColorId.then(this.let({...})) ?: colorId

这意味着let中的块总是被计算出来的。

票数 2
EN

Stack Overflow用户

发布于 2017-08-20 20:07:57

如果不想计算infix函数的第二个参数(如果第一个参数为false ),则应该传递一个lambda,而不是一个值:

代码语言:javascript
复制
inline infix fun <T> Boolean.then(block: () -> T): T? = if (this) block() else null

但是在这种情况下,我更愿意直接编写if (condition) A else B,而不是返回一个可为空的值,该值引入装箱,并迫使您在使用elvis运算符之后检查null

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45786071

复制
相关文章

相似问题

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