大多数编程语言都有某种版本的静态变量。某些语言(如 C#)也有线程静态变量,其中每个线程都有自己的变量实例。是否有任何语言走得更远并实现了“堆栈静态”变量?
明确地说,这就是我想象这样一个变量的工作方式:一个变量的值隐式传递到堆栈中,这样任何方法都可以访问和更改变量的值,但更改仅可见在当前堆栈帧和后面的堆栈帧中。 C# 语法中的一个具体示例:
stack static int number;
public void One()
{
number = 1;
Two();
Four();
}
public void Two()
{
Assert.True(number == 1);
number = 2;
Three();
}
public void Three()
{
Assert.True(number == 2);
}
public void Four()
{
Assert.True(number == 1);
}
这在语义上等同于
public void One()
{
int number = 1;
Two(number);
Four(number);
}
public void Two(int number)
{
Assert.True(number == 1);
number = 2;
Three(number);
}
public void Three(int number)
{
Assert.True(number == 2);
}
public void Four(int number)
{
Assert.True(number == 1);
}
(编译器选择的实际实现可能会有所不同)
我想这在您无法将变量向下传递堆栈(可能是由于调用库方法)或当您有许多此类变量(作为缩短语法的一种方式)的情况下可能很有用。