Может возникнуть некоторая путаница в отношении того, как использовать постоянные процедуры.Вы не вызываете внешнюю процедуру повторно.Вы вызываете внешнюю процедуру один раз с опцией «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.