我不明白为什么使用动态挖掘按该顺序隐藏变量

I don't see why the variables are hidden in that order using dynamic scooping

使用(动态范围)

procedure Main is
     X, Y, Z : Integer;
     procedure Suba is
        A, Y, X : Integer;
        begin
          -- Suba body
        end;
     procedure Subb is
        A, B, Z : Integer;
        begin
        -- Subb body
        end;
     procedure Subc
        A, X, W : Integer;
        begin
        --- Subc body
        end;
        begin
        --- Main body
        end;

问题是: 对于调用序列,说明哪些变量是可见的 在执行最后一个程序期间 主叫苏巴; Suba 调用 Subb; Subb 调用 Subc

为什么是答案: 苏巴:A、X、W 字幕:B,Z Subc: Y

我试过解决它,但我不明白这是怎么回事 谁能解释一下

每次调用"inherits"调用者可见的变量,并引入自己的变量。如果调用引入了一个与调用者同名的变量,则调用者的变量被遮蔽。像这样想象图层,从内部可见 Subc:

Main                       X   Y   Z
Suba         A                 Y   Z
Subb         A   B                 Z
Subc         A          W  X

您可以看到的变量是从底部向上看的每列中的第一个变量。这表明在对 Subc 的调用中,您可以看到以下内容:

* `A`, `W`, and `X` as defined by `Subc`.
* `B` and `Z` as defined by `Subb`.
* `Y` as defined by `Suba`.

正如您在问题中提到的那样,这会反转 SubaSubc 的滚动。这个答案真的没有意义,因为 Suba 根本没有定义 W