gpt4 book ai didi

android - Kotlin 相当于 Swift 的 defer 关键字

转载 作者:搜寻专家 更新时间:2023-11-01 06:00:49 25 4
gpt4 key购买 nike

Kotlin 中是否有类似的东西提供与 Swift 关键字“defer”相同的功能?

defer 关键字的作用是确保 defer block 中的代码在从函数返回之前得到执行。

下面是一个假设 defer 关键字存在于 Kotlin 中的例子。

    class MyClass {

var timeStamp = 0L

fun isEdible(fruit: Fruit): Boolean {
defer {
timeStamp = System.currentTimeMillis()
}
if (fruit.isExpired) {
return false
}
if (fruit.isRipe) {
return true
}
return false
}
}

在上面的例子中,无论函数在什么时候返回,defer 中的 block 将被执行并且时间戳的值将在函数结束之前得到更新。

我知道 Java 有 finally {} 关键字与 try{} catch{} 一起使用,但这并不是 defer 提供的。

最佳答案

Kotlin 中没有这样的关键字,但您可以自己构建一个工作方式非常相似的结构。像这样(注意这不处理延迟 block 中的异常):

class Deferrable {
private val actions: MutableList<() -> Unit> = mutableListOf()

fun defer(f: () -> Unit) {
actions.add(f)
}

fun execute() {
actions.forEach { it() }
}
}

fun <T> defer(f: (Deferrable) -> T): T {
val deferrable = Deferrable()
try {
return f(deferrable)
} finally {
deferrable.execute()
}
}

然后你可以像这样使用它:

class MyClass {

var timeStamp = 0L

fun isEdible(fruit: Fruit): Boolean = defer { d ->
d.defer {
timeStamp = System.currentTimeMillis()
}
if (fruit.isExpired) {
return false
}
if (fruit.isRipe) {
return true
}
return false
}
}

关于android - Kotlin 相当于 Swift 的 defer 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411018/

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