Как постоянно вызывать внешнюю процедуру во внутренней процедуре на языке 4GL? - PullRequest
0 голосов
/ 05 июля 2019

Как я могу постоянно вызывать внешнюю процедуру для получения выходного значения. Если я вызываю это в разделе кода основного блока, то он вызывается только один раз и выдает один раз. Не могли бы вы помочь мне в этом случае с примером? Я новичок в прогрессе. Любая помощь будет великолепна.

Ответы [ 2 ]

4 голосов
/ 05 июля 2019

main.p

DEFINE VARIABLE hp AS HANDLE NO-UNDO.
DEFINE VARIABLE cc AS CHARACTER NO-UNDO.

RUN foo.p PERSISTENT SET hp. // persistent keeps it, SET hp makes it accessible
RUN bar IN hp ( OUTPUT cc ).

DELETE OBJECT hp.

MESSAGE cc.

foo.p

PROCEDURE bar:
   DEFINE OUTPUT PARAMETER cc AS CHARACTER NO-UNDO.

   cc = "see sea":u.

END PROCEDURE.

https://abldojo.services.progress.com:443/#/?shareId=5d1f239e4b1a0f40c34b8bd3

2 голосов
/ 05 июля 2019

Может возникнуть некоторая путаница в отношении того, как использовать постоянные процедуры.Вы не вызываете внешнюю процедуру повторно.Вы вызываете внешнюю процедуру один раз с опцией «persistent», чтобы сохранить ее в памяти.Затем вы вызываете внутренние процедуры персистентной процедуры, возможно, многократно, чтобы выполнить работу.

В некотором роде аналогичные методы вызова объекта.

Если вы предпочитаете избегать работы с персистентной процедуройдескрипторы, у которых постоянная процедура может быть установлена ​​как «сеансовая супер-процедура».Внутренние процедуры могут быть запущены без ссылки на определенный дескриптор.(Это работает хорошо и не сбивает с толку, если у вас есть уникальные имена внутренних процедур и вы не хотите делать такие вещи, как «перегрузка».)

main.p:

/* main.p
 */

define variable i as integer no-undo.

run pp.p persistent.

do while lastkey <> asc('q'):
  run random1to10( output i ).
  message i.
  readkey.
end.

pp.p:

/* pp.p
 */

/* Install self as a session super-procedure */

session:add-super-procedure( this-procedure ).

return.

procedure random1to10:
  define output parameter x as integer no-undo.
  x = random( 1, 10 ).
end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...