Это старая версия документа!
Суть этой возможности в Компонентном Паскале состоит в том, что можно создать переменную, которой позже можно присвоить адрес какой-либо процедуры, после чего, можно использовать эту переменную как саму процедуру.
При этом, нужно помнить, что список аргументов у переменной процедурного типа и самой процедуры должны совпадать.
MODULE TestProcedure;
IMPORT sl := StdLog;
TYPE
tP = PROCEDURE (IN str: ARRAY OF CHAR);
PROCEDURE Test1 (IN str: ARRAY OF CHAR);
BEGIN
sl.String('Test1:=' + str); sl.Ln
END Test1;
PROCEDURE Test2 (IN str: ARRAY OF CHAR);
BEGIN
sl.String('Test2:=' + str); sl.Ln
END Test2;
PROCEDURE Start*;
VAR
pp: tP;
str: ARRAY 40 OF CHAR;
BEGIN
pp := Test1;
str := 'Привет, Вася!';
pp(str);
pp := Test2;
str := 'Привет, Петя!';
pp(str)
END Start;
END TestProcedure.
TestProcedure.Start
Если переменной процедурного типа не присвоить значение, она будет иметь значение NIL.