当前位置: 首页 > 知识库问答 >
问题:

Kotlin中的多变量let

张俊茂
2023-03-14

有没有办法在Kotlin中为多个可为空的变量连锁多个let?

fun example(first: String?, second: String?) {
    first?.let {
        second?.let {
            // Do something just if both are != null
        }
    }
}
fun example(first: String?, second: String?) {
    first?.let && second?.let { 
        // Do something just if both are != null
    }
}

共有1个答案

佘茂才
2023-03-14

如果感兴趣,这里有两个函数来解决这个问题。

inline fun <T: Any> guardLet(vararg elements: T?, closure: () -> Nothing): List<T> {
    return if (elements.all { it != null }) {
        elements.filterNotNull()
    } else {
        closure()
    }
}

inline fun <T: Any> ifLet(vararg elements: T?, closure: (List<T>) -> Unit) {
    if (elements.all { it != null }) {
        closure(elements.filterNotNull())
    }
}

用法:


// Will print
val (first, second, third) = guardLet("Hello", 3, Thing("Hello")) { return }
println(first)
println(second)
println(third)

// Will return
val (first, second, third) = guardLet("Hello", null, Thing("Hello")) { return }
println(first)
println(second)
println(third)

// Will print
ifLet("Hello", "A", 9) {
 (first, second, third) ->
 println(first)
 println(second)
 println(third)
}

// Won't print
ifLet("Hello", 9, null) {
 (first, second, third) ->
 println(first)
 println(second)
 println(third)
}
 类似资料:
  • 我在kotlin中初始化了一些私有Int变量。 我的问题是,当我旋转手机时,会创建一个新的is活动,在当前代码中,分数被分配为0。是否有任何方法可以只初始化一次?出路是什么? 我在使用分数创建内部有一些计算。由于 onRestoreInstanceState 是在 onCreate 之后执行的,除了在 onStart 中定义分数之外,有没有办法保持分数值在屏幕旋转时不受影响?

  • 我在Java中有一个模型类,我把它转换成了kotlin中的数据类 正如您所看到的,我希望在检索变量时更改它的值。 当服务器试图检索时,它返回null,而它应该返回新值。对象具有值,但'videoassets.gethls()'始终为null。 有人能指出我缺少什么吗?

  • 因此,我试图用Kotlin开发一个Android应用程序,作为纸笔RPG伴侣。现在我想创造一个暴民阶层 在另一个活动中,我想显示以下信息: Android studio不断告诉我不能访问“名称”:尽管它在“Mob”中是私有的。我以为这就是我得到< code>get()的原因? 也许有更多静态编程语言经验的人可以帮忙。提前谢谢你。

  • 我是kotlin的新手,当我阅读kotlin中的数据类时,我发现了这些代码。这基本上是java模型类和kotlin数据类之间的比较,而且这两个代码都执行相同的任务。 代码1 代码2 我的问题是,在数据类中,所有变量都是公共的而不是私有的,任何人都可以在此类对象的帮助下直接访问变量,但在java代码中,所有变量都是私有的,这就是为什么我们必须为这些成员变量编写getter和setter,如果它是公共

  • 问题内容: 如何使用Swift在一行中分配多个变量? 问题答案: 你不知道 这是一种语言功能,可以防止赋值的标准不良副作用返回值,如Swift书中所述: 与C和Objective-C中的赋值运算符不同,Swift中的赋值运算符本身并不返回值。以下语句无效: 此功能可防止在实际需要等于运算符()时偶然使用赋值运算符()。通过使其无效,Swift可帮助您避免代码中的此类错误。 因此,这有助于防止此极其

  • 我用增量java解决了optaPlanner的一个问题,其中有一个规划变量和一个规划实体,但是现在在我们的项目中有很多规划变量的需求,比如我们要找到最好的房间(容量,isAC等),汽车(totalSeatsLeft,isAC等),我们不知道有多少资源,因为我们每天都需要根据用户的需求增加更多的资源,比如会议室设施等,所以给我一些想法,这样我们就可以为optaPlanner做一个域。多谢了。