В чем разница между & GLOBAL-DEFINE и & SCOPED-DEFINE в Прогрессе 4gl? - PullRequest
0 голосов
/ 23 января 2019

Я понимаю, что оба являются директивами препроцессора, но я не могу понять, чем они отличаются.Все, что указано в официальной документации Progress: «Синтаксис директив & GLOBAL-DEFINE и & SCOPED-DEFINE идентичен, но эти директивы используются по-разному».что не очень полезно.

Я нашел один источник, который говорит, что переменные & SCOPED-DEFINE остаются определенными до тех пор, пока компилятор не заканчивает текущий файл, в то время как переменные & GLOBAL-DEFINE остаются определенными, пока компилятор не завершит текущую программу.Однако я не совсем понимаю, что это значит.Этот источник также утверждает, что переменные & SCOPED-DEFINE распространяются по стеку включения, но не по нему (я полагаю, что & GLOBAL-DEFINE является двунаправленным?).Я попытался создать простой пример, но, несмотря ни на что, я не могу понять разницу.

Файл 1: test1.p

{test2.i}

Файл 2: test2.i

&GLOBAL-DEFINE HELLO "Hello world!"
{test3.i}

Файл 3: test3.i

MESSAGE {&HELLO} VIEW-AS ALERT-BOX.

Независимо от того, является ли HELLO & SCOPED-DEFINE или & GLOBAL-DEFINE, он все еще определен в test3.i.Так в чем же разница?

1 Ответ

0 голосов
/ 23 января 2019

Вы сказали, что предполагаете, что глобальное распространение распространяется вверх, что я нашел здесь при поиске ответа.Тем не менее, ваш пример тестирует только распространение вниз.Возможно, вам нужно это ...

Файл 1: test1.p

{test2.i}
MESSAGE {&HELLO} VIEW-AS ALERT-BOX.
MESSAGE "{&GOODBYE}" VIEW-AS ALERT-BOX.

Файл 2: test2.i

&GLOBAL-DEFINE HELLO "Hello world!"
&SCOPED-DEFINE GOODBYE Goodbye-cruel-world
{test3.i}

Файл 3: test3.i

MESSAGE {&HELLO} VIEW-AS ALERT-BOX.
MESSAGE "{&GOODBYE}" VIEW-AS ALERT-BOX.

Я ожидаю, что test1.p покажет вам Hello world!, за которым следует пустое сообщение, тогда как test3.p покажет вам оба сообщения в полном объеме.Однако я не пробовал, поэтому я могу ошибаться.

...