我在Progress 4gl工作,是一名新手程序员。我正处理的情况是 五个程序(.p文件) 彼此无关,共享 单个程序(。 p文件)。
我的问题是我需要修改共享过程,它应该只对一个调用过程产生影响,而不是其他四个过程。有什么方法可以同时将这两个程序联系起来,防止对其他四个程序产生影响。
请帮助我解决这个问题。对不起,如果不清楚
答案 0 :(得分:2)
简单但在架构上令人厌恶的解决方案是使用全局共享变量。
很多人会告诉你这是一种糟糕的编码技巧。他们是对的。但是你不是在寻求有关最佳实践的建议。
只需在调用者和被调用者中创建这样的变量即可。不需要它的程序不会错过它。
您的“正常”计划之一:
/* p1.p */
message "p1, I'm normal.".
run common.p.
您的“特殊”计划:
/* p2.p */
define new global shared variable special as character no-undo.
message "p2, I'm special!".
run common.p.
message "special = " special.
共同计划:
/* common.p */
define new global shared variable special as character no-undo.
message "common stuff...".
if program-name(2) = "p2.p" then special = "special value".
return.
您可以根据需要多次定义NEW GLOBAL SHARED变量,只获得一份副本。 “new”不会覆盖任何现有变量(如果省略GLOBAL,它的行为会有所不同)。
你没有要求它,也许你不需要它,但程序名(2)检查窥视调用堆栈,看看是否p2.p调用了common.p。
还有其他更复杂的方法可以做到这一点,但它们都归结为同样的问题 - 你正在为你的“特殊”程序和现在不再通用的“常见”程序之间的一些非常难看的耦合创建基础程序。
答案 1 :(得分:0)
最佳方式是向共享过程添加“标志”,然后在需要不同行为时传递标记。您不想更改共享过程,因此需要知道正在调用它的程序。
答案 2 :(得分:0)
可选
根据您的OpenEdge版本,您可以将逻辑移动到类而不是过程。在课堂上你可以使用重载