&GLOBAL-DEFINE和&SCOPED-DEFINE in Progress 4gl有什么区别?

时间:2019-01-23 13:41:04

标签: progress-4gl preprocessor-directive

我知道这两个都是预处理程序指令,但是我无法弄清它们之间的区别。官方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 :(得分:4)

您说您假设全局传播向上,这是我在寻找答案时发现的here。但是,您的示例仅测试向下传播。也许您需要这个...

文件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将向您显示全部两条消息。但是我没有尝试过,所以我可能是错的。