我想知道它是否有类似 C 函数内部静态变量的功能。
在 C 语言中我们有这样的:
void next_x()
{
static int x = 0;
x++;
}
变量 x
在函数内部声明和初始化。据我所知,C - 它只能在这个函数的范围内使用,并且只能在第一次调用这个函数时初始化。
我在 Kotlin 中需要这样的东西。我有类似这样的代码:
private val x: Int = 0
fun getNextX() : Int {
x++;
return x;
}
我想要这样的东西:
fun getNextX() : Int {
static val x: Int = 0 // this is not Kotlin code
x++;
return x;
}
我想:
- 限制
x
变量范围以强调此对象仅由此函数使用并保护它免受外部更改 - 只初始化一次
- 在函数调用之间保持值/状态
上面的例子被简化了。事实上,对于范围有限但保留状态的 ArrayList,我需要这样的东西。
我意识到我们有单例模式,它几乎可以完美满足这种需求(除了有限的范围),但也许 Kotlin 提供了其他东西?
最佳答案
在 Kotlin 中没有类似的东西,但是为了模拟类似的效果,您可以声明一个 object
并将所有 static
变量作为属性,然后将invoke
运算符中的函数体:
object NextX {
private var x = 0
operator fun invoke() = x++
}
您基本上创建了一个对象
,但从语法上讲,它的工作方式类似于您可以调用的函数:
fun main() {
println(NextX()) // 0
println(NextX()) // 1
println(NextX()) // 2
}
如果您将整个 object
视为您的函数,那么 x
确实只能在“函数”中访问。
关于kotlin - Kotlin 是否在函数内部有类似静态变量的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74524863/