Я не понимаю, почему переменные скрыты в таком порядке с помощью динамического черпания - PullRequest
0 голосов
/ 14 февраля 2019

Использование (Динамическое определение объема)

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 вызывает Subc

Почему ответ: Suba: A, X, W Subb: B, Z Subc: Y

Я пытался работать через него, и я просто не понимаю, как этоОтвет может кто-нибудь дать объяснение

1 Ответ

0 голосов
/ 14 февраля 2019

Каждый вызов «наследует» переменные, видимые его вызывающей стороной, и вводит свои собственные переменные.Если при вызове вводится переменная с тем же именем, что и у вызывающей стороны, переменная вызывающей стороны затеняется.Изобразите слои, подобные этому, как они видны изнутри 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.

...