我不明白为什么使用动态挖掘按该顺序隐藏变量
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`.
正如您在问题中提到的那样,这会反转 Suba
和 Subc
的滚动。这个答案真的没有意义,因为 Suba
根本没有定义 W
。
使用(动态范围)
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`.
正如您在问题中提到的那样,这会反转 Suba
和 Subc
的滚动。这个答案真的没有意义,因为 Suba
根本没有定义 W
。