关于常量的IBM UniVerse数据库手册中有一些信息,但没有特别的。
请注意:
DEFINE语句值
不是我正在寻找的,因为它在编译时用值替换语句,并且不提供值的实际常量。
有谁知道如何宣布这些?
感谢。
答案 0 :(得分:4)
这与UniData(UniVerse的姐妹数据库;两者统称为U2)的声明相同,即: EQU
和 EQUATE
< /强>
例如:
EQU statement TO value
我不完全确定你在第2点的意思,但我会给它一个挖掘。默认情况下,所有参数都是“按引用传递”,但没有const参数的形式。它仍然允许您在函数/子例程内部更改参数值,但结果不会影响调用程序/函数/子例程中等于的值。
附注:如果要确保子程序/函数不会更改您传递的实际变量的值(按值传递),您可以将其分配给临时变量并传递,或用括号括起来
例如:
CALL MySub(PassByRef, (PassByValue))
()
所做的是创建PassByValue
的临时副本,然后通过引用传递临时副本。这会阻止传播回PassByValue
答案 1 :(得分:2)
在Pick/Universe
中使用变量之前,您无需定义变量。
要分配在编译时定义的变量,请使用
EQU PI TO 3.14
要在运行时分配它,请使用
PI = 3.14
这里的主要区别是,一旦在编译时分配,使用EQUATE,变量不能被重新分配,而在运行时分配变量时,它可以是。因此,编译时的编译通常仅为常量保留,而运行时的赋值可以用于常量和标准变量值。
答案 2 :(得分: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