rgv*_*rgv 9 android keyword kotlin swift
Kotlin 中是否有类似的东西可以提供与 Swift 关键字“defer”相同的功能?
defer 关键字的作用是确保 defer 块内的代码在从函数返回之前得到执行。
下面是一个假设 Kotlin 中存在 defer 关键字的示例。
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
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的情况下,无论函数在什么时候返回,内部的块都defer
将被执行,并且时间戳的值将在函数结束之前更新。
我知道 Java 有finally {}
与 一起使用的关键字try{} catch{}
,但它并不完全是 defer 提供的。
Kotlin 中没有这样的关键字,但您可以自己创建一个工作原理非常相似的构造。像这样的东西(请注意,这不处理延迟块中的异常):
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()
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6425 次 |
最近记录: |