2012-04-23 114 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版本,您可以將邏輯移動到類而不是過程。在課堂上,你可以使用超載