2012-04-23 59 views
0

我正在进行工作4gl,并且是一位新手程序员。我工作的情况有五个程序(.p文件)这是互不相关的,共享一个单个程序(.p文件)进度4gl - 共享程序

我的问题是,我需要修改共享过程,这应该只对一个调用过程有效,而不是其他四个。我可以将这两个程序同时联系起来,防止对其他四个程序产生影响的方式是什么?

请帮我解决这个问题。对不起,如果不清楚

回答

0

最好方法是给共享过程添加一个“标志”,然后在需要不同行为时传递一个标志。你不想改变共享过程,所以它需要知道什么程序正在调用它。

+0

是的,我可以理解你的观点。我的疑问是** _我将如何将调用过程的标志值传递给共享过程_ **? – 2012-04-24 08:38:19

+0

将另一个变量添加到过程的API。 – 2012-04-24 09:46:55

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. 

您可以定义一个新的全球共享只要你喜欢多次变量,你只能得到它的一个副本。 “新”不会覆盖任何现有变量(如果您忽略了GLOBAL,它的行为会有所不同)。

你没有要求它,也许你不需要它,但程序名(2)检查调用栈查看是否common.p被p2.p调用。

还有其他更复杂的方法可以做到这一点,但它们都归结为相同的问题 - 您正在为“特殊”程序和现在不再是普通“常见程序之间的一些非常丑陋的耦合创建基础“计划。

0
  • 将过程的所有逻辑移动到具有输入 参数的新逻辑。
  • 从原始调用该过程.p
  • 从需要额外参数的过程中调用新过程。

可选

  • 逐步取代original.p的所有运行到new.p
  • 删除原。一旦你确定所有的跑步都被改变了。

根据您的OpenEdge版本,您可以将逻辑移动到类而不是过程。在课堂上,你可以使用超载