Я бы использовал операторы 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
Для точки 1: насколько я думаю, EQU/EQUATE использует препроцессор и заменяет определенную переменную с заданным значением во время компиляции. Я считаю, что это способ объявить константы в UniVerse. Для пункта 2: это потрясающе! Это именно то, что я искал! И я должен был объяснить, что у меня есть фон C++, и поэтому я называю его постоянной ссылкой. Благодаря! –
В UniData во время компиляции он создает таблицу значений в начале объектного кода. В байтовом коде, который использует эти значения, он ссылается на позицию таблицы для этого значения. Я бы предположил, что UniVerse похож. –