我看不到为什么使用动态挖出按顺序隐藏变量

时间:2019-02-14 17:24:32

标签: dynamic scope dynamic-scope

使用(动态范围界定)

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; Suba称为Subb; Subb呼叫Subc

为什么是答案: Suba:A,X,W SUBB:B,Z SUBC:Y

我尝试通过它完成工作,但我不知道答案如何 谁能提供一个解释

1 个答案:

答案 0 :(得分:0)

每个调用都“继承”其调用者可见的变量,并引入其自己的变量。如果调用中引入的变量与调用方中的变量具有相同的名称,则调用方的变量将被隐藏。从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