- 如何聲明 PICK/UniVerse數據庫中的常量值?
- 如何通過常量引用將參數傳遞給 函數?
IBM的UniVerse數據庫手冊中有一些關於常量的信息,但沒有特別的說明。挑選/ UniVerse數據庫中的常量
請注意:
DEFINE語句值
是不是我要找的,因爲它與替換值的語句在編譯時和不提供價值的真正的常量性。
有誰知道如何聲明這些?
謝謝。
IBM的UniVerse數據庫手冊中有一些關於常量的信息,但沒有特別的說明。挑選/ UniVerse數據庫中的常量
請注意:
DEFINE語句值
是不是我要找的,因爲它與替換值的語句在編譯時和不提供價值的真正的常量性。
有誰知道如何聲明這些?
謝謝。
這是相同的語句中的UniData(宇宙姐姐數據庫;兩者都統稱爲U2),其是:EQU
和EQUATE
例如:
EQU statement TO value
我並不完全確定你的意思是第2點,但我會給它一個挖。默認情況下,所有參數都是「通過引用傳遞」,但沒有任何形式的const參數。它仍然允許您在函數/子程序中內部更改參數值,但結果不會影響調用程序/函數/子程序中等值的值。
附註:如果你想確保一個子程序/功能不改變實際變量的值傳遞(按值傳遞),你可以把它分配給一個臨時變量並傳遞,或用括號
圍繞着它例如:
CALL MySub(PassByRef, (PassByValue))
什麼()
的作用是創造PassByValue
的臨時副本,然後通過引用傳遞的臨時副本。這將停止傳播到PassByValue
我會使用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
你不需要他們在Pick/Universe
使用之前定義的變量。
要分配是在編譯時定義的變量使用
EQU PI TO 3.14
要在運行時使用
PI = 3.14
這裏的主要區別在於,一旦在編譯分配給它分配時間,使用一個EQUATE,變量不能被重新分配,而當它在運行時被分配時,它可以是。因此編譯時的編譯通常僅用於常量,而運行時的賦值可用於常量和標準變量值。
對於第1點:據我所知,EQU/EQUATE使用預處理器,並在編譯時用特定值替換特定變量。 Nevertheles,我認爲這是在UniVerse中聲明常量的方法。對於第2點:這太神奇了!這正是我期待的!我應該解釋說我有C++背景,這就是爲什麼我通過不斷引用來調用它。謝謝! – 2011-02-13 22:48:23