gpt4 book ai didi

kotlin - 有没有办法编写一个改变对象值的扩展函数?

转载 作者:IT老高 更新时间:2023-10-28 13:44:56 30 4
gpt4 key购买 nike

在我的情况下,我想更改一个原语 - bool 值

我从不喜欢以下类型的代码:

private var firstTime: Boolean = true
...

if (firstTime) {
// do something for the first time here
firstTime = false
}

如果我能有这样的扩展功能就好了:

if (firstTime.checkAndUnset()) {
// do something for the first time here
}

这可能吗?

最佳答案

适用于属性的解决方案是为可变属性编写扩展函数,然后将其与属性引用一起使用。此代码适用于 Kotlin 1.1:

fun KMutableProperty0<Boolean>.checkAndUnset(): Boolean {
val result = get()
set(false)
return result
}

用法:

class MyClass {
private var firstTime = true

fun f() {
if (this::firstTime.checkAndUnset()) {
println("First time")
}
}
}

fun main(args: Array<String>) {
val c = MyClass()
c.f() // First time
c.f() //
}

(check the runnable demo)

然而,这对局部变量不起作用(至少在 Kotlin 1.1 中不起作用)。


在 Kotlin 1.0.x 中,bound callable references尚不可用,上面的解决方案可以重写为这个有点笨拙的代码:

fun <T> KMutableProperty1<T, Boolean>.checkAndUnset(receiver: T): Boolean {
val result = get(receiver)
set(receiver, false)
return result
}

MyClass::firstTime.checkAndUnset(this)

关于kotlin - 有没有办法编写一个改变对象值的扩展函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185182/

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