2011-02-11 54 views
3
  1. 如何聲明 PICK/UniVerse數據庫中的常量值?
  2. 如何通過常量引用將參數傳遞給 函數?

IBM的UniVerse數據庫手冊中有一些關於常量的信息,但沒有特別的說明。挑選/ UniVerse數據庫中的常量

請注意:

DEFINE語句值

是不是我要找的,因爲它與替換值的語句在編譯時和不提供價值的真正的常量性。

有誰知道如何聲明這些?

謝謝。

回答

4

這是相同的語句中的UniData(宇宙姐姐數據庫;兩者都統稱爲U2),其是:EQUEQUATE

例如:

EQU statement TO value

我並不完全確定你的意思是第2點,但我會給它一個挖。默認情況下,所有參數都是「通過引用傳遞」,但沒有任何形式的const參數。它仍然允許您在函數/子程序中內部更改參數值,但結果不會影響調用程序/函數/子程序中等值的值。


附註:如果你想確保一個子程序/功能不改變實際變量的值傳遞(按值傳遞),你可以把它分配給一個臨時變量並傳遞,或用括號

圍繞着它例如:

CALL MySub(PassByRef, (PassByValue))

什麼()的作用是創造PassByValue的臨時副本,然後通過引用傳遞的臨時副本。這將停止傳播到PassByValue

+1

對於第1點:據我所知,EQU/EQUATE使用預處理器,並在編譯時用特定值替換特定變量。 Nevertheles,我認爲這是在UniVerse中聲明常量的方法。對於第2點:這太神奇了!這正是我期待的!我應該解釋說我有C++背景,這就是爲什麼我通過不斷引用來調用它。謝謝! – 2011-02-13 22:48:23

1

我會使用EQUATE語句來創建常量,並且如果您想讓它們可用於多個程序,您應該將它們放在它們自己的記錄中,並使用$ INCLUDE語句來拉定義轉化爲其他程序。請注意,所有的值都將在編譯時建立。對於在編譯時以外的某個時間建立的「常量」,或者通過標記間接引用值(傳遞常量引用),大多數U2程序員使用某種控制記錄。由於U2中的文件系統和編程語言是如此交織在一起,所以沒有人想過這個問題。我使用的大多數系統都有一個或多個文件,稱爲「SOMETHING.OR.OTHER.CTRL」,具有自由形式的記錄結構。編輯器用於將數據填充到控制文件中的記錄中,並使用描述該函數的鍵,如「INVENTORY.CONSTANTS」。

對於間接引用,建立記錄的第一個屬性具有多值「常量」名稱,第二個字段具有「常量」值,也是多值的。像這樣:

INVENTORY.CONSTANTS: 

001: JOHN*PAUL*GEORGE*RINGO 
001: 100*57*83*19833 

(其中「*」實際上是一個值標記)。

然後程序會執行以下操作:

SUBROUTINE SAMPLE(CONSTANT.NAME) 
    . 
    . 
    . 
OPEN "","SOMETHING.OR.OTHER.CONTROL" TO CTRL.FILE ELSE BOMB 
READ CONST.REC FROM CTRL.FILE, "INVENTORY.CONTSTANTS" THEN 
    LOCATE CONSTANT.NAME IN CONST.REC<1> SETTING CONST.POS THEN 
    CONST.VALUE = CONST.REC<2,CONST.POS> 
    END ELSE 
    BOMB 
    END 
END ELSE 
    BOMB 
END 
2

你不需要他們在Pick/Universe使用之前定義的變量。

要分配是在編譯時定義的變量使用

EQU PI TO 3.14

要在運行時使用

PI = 3.14

這裏的主要區別在於,一旦在編譯分配給它分配時間,使用一個EQUATE,變量不能被重新分配,而當它在運行時被分配時,它可以是。因此編譯時的編譯通常僅用於常量,而運行時的賦值可用於常量和標準變量值。