是否有任何带有“堆栈静态”变量的编程语言?

时间:2021-03-08 22:07:37

标签: variables static stack programming-languages

大多数编程语言都有某种版本的静态变量。某些语言(如 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);
}

(编译器选择的实际实现可能会有所不同)

我想这在您无法将变量向下传递堆栈(可能是由于调用库方法)或当您有许多此类变量(作为缩短语法的一种方式)的情况下可能很有用。

0 个答案:

没有答案
相关问题