2011-02-11 3 views
3
  1. Как объявить постоянное значение в База данных PICK/UniVerse?
  2. Как передать аргумент функции по постоянной ссылке?

В справочнике IBM для базы данных UniVerse содержится некоторая информация о константах, но ничего конкретно.Константы in pick/UniVerse база данных

Пожалуйста, обратите внимание, что:

DEFINE значения заявления

не то, что я ищу, потому что он заменяет заявление со значением во время компиляции и не даю реальную константность величины.

Кто-нибудь знает, как объявить об этом?

Спасибо.

ответ

4

Это же утверждение, как и в UniData (база данных сестры вселенской, оба вместе называются U2), который: EQU и EQUATE

Например:

EQU statement TO value

Я не совсем уверен, что вы подразумеваете под пунктом 2, но я дам ему копать. По умолчанию все параметры «проходят по ссылке», но нет аргумента const. Он по-прежнему позволит вам изменить значение параметра внутри функции/подпрограммы, но результаты не будут влиять на значения equates обратно в вызывающей программе/функции/подпрограмме.


Side Примечание: Если вы хотите, чтобы обеспечить подпрограмму/функция не изменяет значение фактической переменной вы передаете (передать по значению), вы можете присвоить его переменной темп и передать, или окружить его скобкой

Например:

CALL MySub(PassByRef, (PassByValue))

() что делает создать временную копию PassByValue затем передать временную копию по ссылке. Это останавливает изменения, распространяющиеся обратно на PassByValue

+1

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

+0

В UniData во время компиляции он создает таблицу значений в начале объектного кода. В байтовом коде, который использует эти значения, он ссылается на позицию таблицы для этого значения. Я бы предположил, что UniVerse похож. –

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, переменная не может быть переназначена, тогда как когда она назначена во время выполнения, она может быть. Поэтому компиляция во время компиляции обычно резервируется исключительно для констант, тогда как назначение во время выполнения может использоваться как для констант, так и для стандартных значений переменных.

Смежные вопросы