Ruby中有没有静态变量这样的东西,其行为会像它们在C函数中一样?
这里有一个简单的例子来说明我的意思,它会将“6\n7\n”打印到控制台。
#include <stdio.h>
int test() {
static int a = 5;
a++;
return a;
}
int main() {
printf("%d\n", test());
printf("%d\n", test());
return 0;
}
6条答案
按热度按时间2uluyalo1#
我对这段C代码的理解是,静态变量初始化为一个值(在本例中为
5
),并且其值在函数调用中保持不变。在Ruby和具有相同抽象级别的语言中,通常可以通过使用位于函数作用域之外的变量或使用对象来保存该变量来实现这一点。
Ruby的奇特之处在于,甚至可以在类定义之外使用示例变量。
tez616oj2#
与尼古加的回答相似,但更加独立:
qyzbxkaa3#
在方法中限定变量的范围并返回lambda
ie3xauqp4#
可以使用全局变量:
w6lpcovy5#
在单例类中使用变量(静态类本身)
在ruby中,任何类都是一个只有一个示例的对象,因此,你可以在类上创建一个示例变量,它将作为一个“静态”方法工作;)
输出:
要在主作用域上获得此行为,您可以执行以下操作:
83qze16e6#
我认为标准的方法是使用
Fiber
。